{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "promotional-services",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:22.826358Z",
     "iopub.status.busy": "2021-04-22T11:14:22.825435Z",
     "iopub.status.idle": "2021-04-22T11:14:22.829201Z",
     "shell.execute_reply": "2021-04-22T11:14:22.828493Z"
    },
    "id": "IU3QDXWZj56H",
    "papermill": {
     "duration": 0.063148,
     "end_time": "2021-04-22T11:14:22.829377",
     "exception": false,
     "start_time": "2021-04-22T11:14:22.766229",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "TEST = False\n",
    "\n",
    "WHERE_PLACE = \"kaggle\" #The WHERE_PLACE variable must have the following value:\"local\",\"kaggle\",\"colab\"\n",
    "\n",
    "Phase_1 = False\n",
    "Phase_2 = False\n",
    "NAME_OUTPUT_FILE = 'TPSA_A_LGBM-tuning(v42)'\n",
    "NAME_OUTPUT_FOR_STAKING = 'LGBM_probs_for_staking(v42)'\n",
    "NAME_OUTPUT_FOR_STAKING_TEST = 'LGBM_probs_test_for_staking(v42)'\n",
    "TARGET = 'Survived'\n",
    "INDEX_COL = 'PassengerId'\n",
    "\n",
    "import numpy as np\n",
    "# Range of values for selection in phase 1 :\n",
    "N_ESTIMATORS_RANG = [200000] #[5000] #list(range(4000,5000,100)) # \n",
    "RANG_LEARNING_RATE = list(np.arange(0.000005,0.00004,0.000005)) #[ 0.002] # list(np.arange(0.001,0.1,0.001))  \n",
    "threshold = 0.47231523177731743\n",
    "\n",
    "CV =  10 # 5\n",
    "CV_O =  10 # \n",
    "TEST_SIZE = 0.2\n",
    "\n",
    "N_TRIALS = 100\n",
    "SEED = 2599999\n",
    "GPU = False\n",
    "\n",
    "SELECT_PRED = False\n",
    "SELECT_PRED2 = False\n",
    "\n",
    "# ------------------------------------------------------------------------------\n",
    "# Path definition\n",
    "# ------------------------------------------------------------------------------\n",
    "from pathlib import Path\n",
    "DATA_PATH_Kaggle = Path(\"../input/tabular-playground-series-apr-2021\")\n",
    "DATA_PATH_Colab = Path(\"/content/drive/My Drive/Colab Notebooks/TB2\")\n",
    "LOG_PATH = Path(\"./log/\")\n",
    "NAME_RUN_LOG = 'Run__Logs.log'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "vital-alabama",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:22.930015Z",
     "iopub.status.busy": "2021-04-22T11:14:22.929364Z",
     "iopub.status.idle": "2021-04-22T11:14:22.934078Z",
     "shell.execute_reply": "2021-04-22T11:14:22.933561Z"
    },
    "papermill": {
     "duration": 0.058537,
     "end_time": "2021-04-22T11:14:22.934212",
     "exception": false,
     "start_time": "2021-04-22T11:14:22.875675",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "70"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(len(N_ESTIMATORS_RANG)*len(RANG_LEARNING_RATE))*CV"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "unsigned-aberdeen",
   "metadata": {
    "papermill": {
     "duration": 0.046446,
     "end_time": "2021-04-22T11:14:23.027612",
     "exception": false,
     "start_time": "2021-04-22T11:14:22.981166",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "params = {\n",
    "    'n_estimators': 200000, # 5000,\n",
    "    'learning_rate': 0.00004, # 0.002,\n",
    "    'num_leaves': 246, \n",
    "    'max_bin': 631, \n",
    "    'min_child_samples': 287, \n",
    "    'min_sum_hessian_in_leaf': 36.23686299058342, \n",
    "    'bagging_fraction': 0.9663000952102834, \n",
    "    'feature_fraction': 0.5588941289441328, \n",
    "    'bagging_freq': 51, \n",
    "    'reg_alpha': 10.794311547009851, \n",
    "    'reg_lambda': 0.5872293349946798\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cultural-surge",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:23.133485Z",
     "iopub.status.busy": "2021-04-22T11:14:23.132806Z",
     "iopub.status.idle": "2021-04-22T11:14:23.136299Z",
     "shell.execute_reply": "2021-04-22T11:14:23.135727Z"
    },
    "papermill": {
     "duration": 0.061137,
     "end_time": "2021-04-22T11:14:23.136435",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.075298",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "####### Берем полученные наилучшие значения гиперпараметров с прошлых итераций\n",
    "####### Значения получены за несколько полных прогонов в ноутбуке - lightgbm_tuning_2K_W_UN7 :\n",
    "params = {\n",
    "    'n_estimators': 20000, # 5000,\n",
    "    'learning_rate': 0.0004, # 0.002,\n",
    "    'num_leaves': 246, \n",
    "    'max_bin': 631, \n",
    "    'min_child_samples': 287, \n",
    "    'min_sum_hessian_in_leaf': 36.23686299058342, \n",
    "    'bagging_fraction': 0.9663000952102834, \n",
    "    'feature_fraction': 0.5588941289441328, \n",
    "    'bagging_freq': 51, \n",
    "    'reg_alpha': 10.794311547009851, \n",
    "    'reg_lambda': 0.5872293349946798\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "broadband-tulsa",
   "metadata": {
    "papermill": {
     "duration": 0.047445,
     "end_time": "2021-04-22T11:14:23.231045",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.183600",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "len(RANG_LEARNING_RATE),  RANG_LEARNING_RATE"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "governing-spell",
   "metadata": {
    "papermill": {
     "duration": 0.047061,
     "end_time": "2021-04-22T11:14:23.325406",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.278345",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "####### Берем полученные наилучшие значения гиперпараметров с прошлых итераций\n",
    "####### Значения получены за несколько полных прогонов в ноутбуке - lightgbm_tuning_2K_W_UN7 :\n",
    "params = {\n",
    "    'n_estimators': 300000, #100000, #200000, # 5000,\n",
    "    'learning_rate': 1e-05,# 3.999999999999999e-05, #0.00004, # 0.002,\n",
    "    'num_leaves': 246, \n",
    "    'max_bin': 631, \n",
    "    'min_child_samples': 287, \n",
    "    'min_sum_hessian_in_leaf': 36.23686299058342, \n",
    "    'bagging_fraction': 0.9663000952102834, \n",
    "    'feature_fraction': 0.5588941289441328, \n",
    "    'bagging_freq': 51, \n",
    "    'reg_alpha': 10.794311547009851, \n",
    "    'reg_lambda': 0.5872293349946798\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "changed-practice",
   "metadata": {
    "papermill": {
     "duration": 0.04815,
     "end_time": "2021-04-22T11:14:23.420692",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.372542",
     "status": "completed"
    },
    "tags": []
   },
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "moved-westminster",
   "metadata": {
    "papermill": {
     "duration": 0.046283,
     "end_time": "2021-04-22T11:14:23.513869",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.467586",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "####### Берем полученные наилучшие значения гиперпараметров с прошлых итераций\n",
    "####### Значения получены за несколько полных прогонов в ноутбуке - lightgbm_tuning_2K_W_UN7 :\n",
    "params = {\n",
    "    'n_estimators': 20000, # 5000,\n",
    "    'learning_rate': 0.0004, # 0.002,\n",
    "    'num_leaves': 246, \n",
    "    'max_bin': 631, \n",
    "    'min_child_samples': 287, \n",
    "    'min_sum_hessian_in_leaf': 36.23686299058342, \n",
    "    'bagging_fraction': 0.9663000952102834, \n",
    "    'feature_fraction': 0.5588941289441328, \n",
    "    'bagging_freq': 51, \n",
    "    'reg_alpha': 10.794311547009851, \n",
    "    'reg_lambda': 0.5872293349946798\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "conscious-twins",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:23.634666Z",
     "iopub.status.busy": "2021-04-22T11:14:23.633937Z",
     "iopub.status.idle": "2021-04-22T11:14:23.645301Z",
     "shell.execute_reply": "2021-04-22T11:14:23.644499Z"
    },
    "id": "otxlKdSTj56b",
    "outputId": "aa5ed5fe-410d-4872-bdd8-9197c83d5a2a",
    "papermill": {
     "duration": 0.084633,
     "end_time": "2021-04-22T11:14:23.645469",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.560836",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "KAGGLE\n",
      "Время старта скрипта: 22-04-2021 11:14\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'n_estimators': 20000,\n",
       " 'learning_rate': 0.0004,\n",
       " 'num_leaves': 246,\n",
       " 'max_bin': 631,\n",
       " 'min_child_samples': 287,\n",
       " 'min_sum_hessian_in_leaf': 36.23686299058342,\n",
       " 'bagging_fraction': 0.9663000952102834,\n",
       " 'feature_fraction': 0.5588941289441328,\n",
       " 'bagging_freq': 51,\n",
       " 'reg_alpha': 10.794311547009851,\n",
       " 'reg_lambda': 0.5872293349946798}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from time import time\n",
    "import datetime\n",
    "start_time = time()\n",
    "\n",
    "if TEST:\n",
    "    params.update({'n_estimators': 5})\n",
    "    NAME_OUTPUT_FILE = '_TEST_' + NAME_OUTPUT_FILE + '_TEST_'\n",
    "    print('**************************************************************')\n",
    "    print('*** TEST mode ***')\n",
    "    print('**************************************************************')\n",
    "    \n",
    "if WHERE_PLACE == \"local\":\n",
    "    input_path = Path('Data')\n",
    "    d_ext = 'csv'\n",
    "    print(\"LOCAL\")\n",
    "elif  WHERE_PLACE == \"kaggle\":\n",
    "    input_path = DATA_PATH_Kaggle\n",
    "    d_ext = 'csv'\n",
    "    print(\"KAGGLE\")\n",
    "elif  WHERE_PLACE == \"colab\":\n",
    "    from google.colab import drive\n",
    "    drive.mount('/content/drive/')\n",
    "    #!ls -al \"/content/drive/My Drive/Colab Notebooks/TB1\"\n",
    "    input_path = DATA_PATH_Colab\n",
    "    d_ext = 'dcv'\n",
    "    !pip install catboost\n",
    "    !pip install optuna\n",
    "    !pip install category_encoders\n",
    "    print(\"Google Colab\")\n",
    "else:\n",
    "    raise Exception('the WHERE_PLACE variable must have the following value: \"local, kaggle, colab\".')\n",
    "    \n",
    "if GPU:\n",
    "    params['device'] = 'gpu'\n",
    "    params['gpu_platform_id'] = 0\n",
    "    params['gpu_device_id'] = 0\n",
    "   ### !pip uninstall lightgbm -y\n",
    "    # install lightgbm GPU\n",
    "  ###  !pip install lightgbm --install-option=--gpu --install-option=\"--opencl-include-dir=/usr/local/cuda/include/\" --install-option=\"--opencl-library=/usr/local/cuda/lib64/libOpenCL.so\"\n",
    "    \n",
    "LOG_PATH.mkdir(parents=True, exist_ok=True)\n",
    "with open(NAME_RUN_LOG, 'at', encoding='utf-8') as logfile:\n",
    "    print('\\n\\n***********************\\n***********************', \n",
    "          file=logfile)\n",
    "    print('Время старта скрипта: {}'.format(datetime.datetime.now().strftime(\"%d-%m-%Y %H:%M\")), \n",
    "          file=logfile)\n",
    "print('Время старта скрипта: {}'.format(datetime.datetime.now().strftime(\"%d-%m-%Y %H:%M\")))\n",
    "    \n",
    "params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "colored-procurement",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:23.754830Z",
     "iopub.status.busy": "2021-04-22T11:14:23.754156Z",
     "iopub.status.idle": "2021-04-22T11:14:26.169748Z",
     "shell.execute_reply": "2021-04-22T11:14:26.168972Z"
    },
    "id": "lYBoXTJxj56d",
    "outputId": "1946ec14-3d81-402b-b068-45a01c44e368",
    "papermill": {
     "duration": 2.475547,
     "end_time": "2021-04-22T11:14:26.169889",
     "exception": false,
     "start_time": "2021-04-22T11:14:23.694342",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style type='text/css'>\n",
       ".datatable table.frame { margin-bottom: 0; }\n",
       ".datatable table.frame thead { border-bottom: none; }\n",
       ".datatable table.frame tr.coltypes td {  color: #FFFFFF;  line-height: 6px;  padding: 0 0.5em;}\n",
       ".datatable .bool    { background: #DDDD99; }\n",
       ".datatable .object  { background: #565656; }\n",
       ".datatable .int     { background: #5D9E5D; }\n",
       ".datatable .float   { background: #4040CC; }\n",
       ".datatable .str     { background: #CC4040; }\n",
       ".datatable .row_index {  background: var(--jp-border-color3);  border-right: 1px solid var(--jp-border-color0);  color: var(--jp-ui-font-color3);  font-size: 9px;}\n",
       ".datatable .frame tr.coltypes .row_index {  background: var(--jp-border-color0);}\n",
       ".datatable th:nth-child(2) { padding-left: 12px; }\n",
       ".datatable .hellipsis {  color: var(--jp-cell-editor-border-color);}\n",
       ".datatable .vellipsis {  background: var(--jp-layout-color0);  color: var(--jp-cell-editor-border-color);}\n",
       ".datatable .na {  color: var(--jp-cell-editor-border-color);  font-size: 80%;}\n",
       ".datatable .footer { font-size: 9px; }\n",
       ".datatable .frame_dimensions {  background: var(--jp-border-color3);  border-top: 1px solid var(--jp-border-color0);  color: var(--jp-ui-font-color3);  display: inline-block;  opacity: 0.6;  padding: 1px 10px 1px 5px;}\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# загружаем необходимые библиотеки\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.impute import SimpleImputer\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.compose import ColumnTransformer\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.model_selection import GridSearchCV,RandomizedSearchCV\n",
    "from lightgbm import LGBMClassifier\n",
    "from sklearn.preprocessing import OrdinalEncoder\n",
    "from sklearn.metrics import roc_auc_score\n",
    "import optuna\n",
    "from optuna.samplers import RandomSampler\n",
    "from optuna.integration import OptunaSearchCV\n",
    "from optuna.distributions import IntUniformDistribution, UniformDistribution\n",
    "# импортируем класс StandardScaler, позволяющий\n",
    "# выполнить стандартизацию\n",
    "from sklearn.preprocessing import StandardScaler, LabelEncoder\n",
    "from category_encoders import TargetEncoder, OrdinalEncoder, LeaveOneOutEncoder\n",
    "\n",
    "pd.set_option('display.max_columns', 1000)\n",
    "pd.set_option('display.max_rows', 20)\n",
    "\n",
    "# импортируем библиотеку seaborn для нашей \n",
    "# функции diagnostics_skewness()\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "# импортируем модули norm и stats библиотеки scipy для\n",
    "# построения гистограмм и графиков квантиль-квантиль\n",
    "from scipy.stats import norm\n",
    "from scipy import stats\n",
    "\n",
    "from sklearn.metrics import roc_auc_score, roc_curve \n",
    "from sklearn.model_selection import cross_val_predict\n",
    "import scikitplot as skplt\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "vanilla-nylon",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:26.273739Z",
     "iopub.status.busy": "2021-04-22T11:14:26.273111Z",
     "iopub.status.idle": "2021-04-22T11:14:26.654836Z",
     "shell.execute_reply": "2021-04-22T11:14:26.654151Z"
    },
    "id": "_CJf3w1Rj56e",
    "outputId": "c33766b2-a179-4a95-ea16-da37f6ef1116",
    "papermill": {
     "duration": 0.435225,
     "end_time": "2021-04-22T11:14:26.654993",
     "exception": false,
     "start_time": "2021-04-22T11:14:26.219768",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PassengerId</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Oconnor, Frankie</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>209245</td>\n",
       "      <td>27.14</td>\n",
       "      <td>C12239</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Bryan, Drew</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>27323</td>\n",
       "      <td>13.35</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Owens, Kenneth</td>\n",
       "      <td>male</td>\n",
       "      <td>0.33</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>CA 457703</td>\n",
       "      <td>71.29</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Kramer, James</td>\n",
       "      <td>male</td>\n",
       "      <td>19.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A. 10866</td>\n",
       "      <td>13.04</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Bond, Michael</td>\n",
       "      <td>male</td>\n",
       "      <td>25.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>427635</td>\n",
       "      <td>7.76</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99995</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Bell, Adele</td>\n",
       "      <td>female</td>\n",
       "      <td>62.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 15008</td>\n",
       "      <td>14.86</td>\n",
       "      <td>D17243</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99996</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Brown, Herman</td>\n",
       "      <td>male</td>\n",
       "      <td>66.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13273</td>\n",
       "      <td>11.15</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99997</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Childress, Charles</td>\n",
       "      <td>male</td>\n",
       "      <td>37.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9.95</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99998</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Caughlin, Thomas</td>\n",
       "      <td>male</td>\n",
       "      <td>51.00</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>458654</td>\n",
       "      <td>30.92</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99999</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Enciso, Tyler</td>\n",
       "      <td>male</td>\n",
       "      <td>55.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>458074</td>\n",
       "      <td>13.96</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100000 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Survived  Pclass                Name     Sex    Age  SibSp  \\\n",
       "PassengerId                                                               \n",
       "0                   1       1    Oconnor, Frankie    male    NaN      2   \n",
       "1                   0       3         Bryan, Drew    male    NaN      0   \n",
       "2                   0       3      Owens, Kenneth    male   0.33      1   \n",
       "3                   0       3       Kramer, James    male  19.00      0   \n",
       "4                   1       3       Bond, Michael    male  25.00      0   \n",
       "...               ...     ...                 ...     ...    ...    ...   \n",
       "99995               1       2         Bell, Adele  female  62.00      0   \n",
       "99996               0       2       Brown, Herman    male  66.00      0   \n",
       "99997               0       3  Childress, Charles    male  37.00      0   \n",
       "99998               0       3    Caughlin, Thomas    male  51.00      0   \n",
       "99999               0       3       Enciso, Tyler    male  55.00      0   \n",
       "\n",
       "             Parch     Ticket   Fare   Cabin Embarked  \n",
       "PassengerId                                            \n",
       "0                0     209245  27.14  C12239        S  \n",
       "1                0      27323  13.35     NaN        S  \n",
       "2                2  CA 457703  71.29     NaN        S  \n",
       "3                0   A. 10866  13.04     NaN        S  \n",
       "4                0     427635   7.76     NaN        S  \n",
       "...            ...        ...    ...     ...      ...  \n",
       "99995            0   PC 15008  14.86  D17243        C  \n",
       "99996            0      13273  11.15     NaN        S  \n",
       "99997            0        NaN   9.95     NaN        S  \n",
       "99998            1     458654  30.92     NaN        S  \n",
       "99999            0     458074  13.96     NaN        S  \n",
       "\n",
       "[100000 rows x 11 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# увеличиваем количество выводимых столбцов\n",
    "pd.set_option('display.max_columns', 60)\n",
    "# загружаем набор\n",
    "data =  pd.read_csv(input_path / ('train.' + d_ext), index_col=INDEX_COL)\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "charged-wright",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:26.804960Z",
     "iopub.status.busy": "2021-04-22T11:14:26.760334Z",
     "iopub.status.idle": "2021-04-22T11:14:26.824431Z",
     "shell.execute_reply": "2021-04-22T11:14:26.823754Z"
    },
    "papermill": {
     "duration": 0.119297,
     "end_time": "2021-04-22T11:14:26.824572",
     "exception": false,
     "start_time": "2021-04-22T11:14:26.705275",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 100000 entries, 0 to 99999\n",
      "Data columns (total 11 columns):\n",
      " #   Column    Non-Null Count   Dtype  \n",
      "---  ------    --------------   -----  \n",
      " 0   Survived  100000 non-null  int64  \n",
      " 1   Pclass    100000 non-null  int64  \n",
      " 2   Name      100000 non-null  object \n",
      " 3   Sex       100000 non-null  object \n",
      " 4   Age       96708 non-null   float64\n",
      " 5   SibSp     100000 non-null  int64  \n",
      " 6   Parch     100000 non-null  int64  \n",
      " 7   Ticket    95377 non-null   object \n",
      " 8   Fare      99866 non-null   float64\n",
      " 9   Cabin     32134 non-null   object \n",
      " 10  Embarked  99750 non-null   object \n",
      "dtypes: float64(2), int64(4), object(5)\n",
      "memory usage: 9.2+ MB\n"
     ]
    }
   ],
   "source": [
    "# смотрим типы переменных\n",
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "coated-cache",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:26.975987Z",
     "iopub.status.busy": "2021-04-22T11:14:26.930754Z",
     "iopub.status.idle": "2021-04-22T11:14:26.984436Z",
     "shell.execute_reply": "2021-04-22T11:14:26.983852Z"
    },
    "papermill": {
     "duration": 0.10927,
     "end_time": "2021-04-22T11:14:26.984570",
     "exception": false,
     "start_time": "2021-04-22T11:14:26.875300",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Survived        0\n",
      "Pclass          0\n",
      "Name            0\n",
      "Sex             0\n",
      "Age          3292\n",
      "SibSp           0\n",
      "Parch           0\n",
      "Ticket       4623\n",
      "Fare          134\n",
      "Cabin       67866\n",
      "Embarked      250\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# смотрим еще по другому наличие пропусков\n",
    "print(data.isnull().sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "documented-bandwidth",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:27.095686Z",
     "iopub.status.busy": "2021-04-22T11:14:27.095067Z",
     "iopub.status.idle": "2021-04-22T11:14:27.142210Z",
     "shell.execute_reply": "2021-04-22T11:14:27.142840Z"
    },
    "papermill": {
     "duration": 0.10804,
     "end_time": "2021-04-22T11:14:27.143028",
     "exception": false,
     "start_time": "2021-04-22T11:14:27.034988",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>100000.000000</td>\n",
       "      <td>100000.000000</td>\n",
       "      <td>96708.000000</td>\n",
       "      <td>100000.000000</td>\n",
       "      <td>100000.000000</td>\n",
       "      <td>99866.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.427740</td>\n",
       "      <td>2.106910</td>\n",
       "      <td>38.355472</td>\n",
       "      <td>0.397690</td>\n",
       "      <td>0.454560</td>\n",
       "      <td>43.92933</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.494753</td>\n",
       "      <td>0.837727</td>\n",
       "      <td>18.313556</td>\n",
       "      <td>0.862566</td>\n",
       "      <td>0.950076</td>\n",
       "      <td>69.58882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.080000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.68000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>10.04000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>39.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>24.46000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>53.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>33.50000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>87.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>744.66000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            Survived         Pclass           Age          SibSp  \\\n",
       "count  100000.000000  100000.000000  96708.000000  100000.000000   \n",
       "mean        0.427740       2.106910     38.355472       0.397690   \n",
       "std         0.494753       0.837727     18.313556       0.862566   \n",
       "min         0.000000       1.000000      0.080000       0.000000   \n",
       "25%         0.000000       1.000000     25.000000       0.000000   \n",
       "50%         0.000000       2.000000     39.000000       0.000000   \n",
       "75%         1.000000       3.000000     53.000000       1.000000   \n",
       "max         1.000000       3.000000     87.000000       8.000000   \n",
       "\n",
       "               Parch         Fare  \n",
       "count  100000.000000  99866.00000  \n",
       "mean        0.454560     43.92933  \n",
       "std         0.950076     69.58882  \n",
       "min         0.000000      0.68000  \n",
       "25%         0.000000     10.04000  \n",
       "50%         0.000000     24.46000  \n",
       "75%         1.000000     33.50000  \n",
       "max         9.000000    744.66000  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "dental-wilderness",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:27.249499Z",
     "iopub.status.busy": "2021-04-22T11:14:27.248879Z",
     "iopub.status.idle": "2021-04-22T11:14:27.252060Z",
     "shell.execute_reply": "2021-04-22T11:14:27.251568Z"
    },
    "id": "AaNAOFfSj56e",
    "papermill": {
     "duration": 0.058403,
     "end_time": "2021-04-22T11:14:27.252188",
     "exception": false,
     "start_time": "2021-04-22T11:14:27.193785",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if TEST:\n",
    "    data = data[:5000]\n",
    "    print(\"TEST MODE, Data shape = \",data.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "essential-eight",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:27.358276Z",
     "iopub.status.busy": "2021-04-22T11:14:27.357598Z",
     "iopub.status.idle": "2021-04-22T11:14:27.365402Z",
     "shell.execute_reply": "2021-04-22T11:14:27.364616Z"
    },
    "papermill": {
     "duration": 0.063351,
     "end_time": "2021-04-22T11:14:27.365544",
     "exception": false,
     "start_time": "2021-04-22T11:14:27.302193",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    57226\n",
       "1    42774\n",
       "Name: Survived, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[TARGET].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "interpreted-spelling",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:27.482948Z",
     "iopub.status.busy": "2021-04-22T11:14:27.482271Z",
     "iopub.status.idle": "2021-04-22T11:14:27.607770Z",
     "shell.execute_reply": "2021-04-22T11:14:27.607099Z"
    },
    "papermill": {
     "duration": 0.189722,
     "end_time": "2021-04-22T11:14:27.607915",
     "exception": false,
     "start_time": "2021-04-22T11:14:27.418193",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Name        92144\n",
       "Ticket      75331\n",
       "Cabin       26992\n",
       "Embarked        3\n",
       "Sex             2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Смотрим на количество уникальных значений для категориальных столбцов\n",
    "data[data.dtypes[data.dtypes == 'object'].index].nunique().sort_values(ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "numeric-mills",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:27.721287Z",
     "iopub.status.busy": "2021-04-22T11:14:27.720525Z",
     "iopub.status.idle": "2021-04-22T11:14:27.738674Z",
     "shell.execute_reply": "2021-04-22T11:14:27.737994Z"
    },
    "papermill": {
     "duration": 0.079003,
     "end_time": "2021-04-22T11:14:27.738833",
     "exception": false,
     "start_time": "2021-04-22T11:14:27.659830",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Fare        15935\n",
       "Age           173\n",
       "Parch           8\n",
       "SibSp           7\n",
       "Pclass          3\n",
       "Survived        2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Смотрим на количество уникальных значений для численных столбцов\n",
    "data[data.dtypes[data.dtypes != 'object'].index].nunique().sort_values(ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "durable-administrator",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:27.891644Z",
     "iopub.status.busy": "2021-04-22T11:14:27.890925Z",
     "iopub.status.idle": "2021-04-22T11:14:28.103332Z",
     "shell.execute_reply": "2021-04-22T11:14:28.103881Z"
    },
    "papermill": {
     "duration": 0.313083,
     "end_time": "2021-04-22T11:14:28.104054",
     "exception": false,
     "start_time": "2021-04-22T11:14:27.790971",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Johnson, John         31\n",
      "Smith, James          24\n",
      "Smith, John           24\n",
      "Johnson, William      22\n",
      "Smith, Michael        20\n",
      "                      ..\n",
      "Hinson, Irene          1\n",
      "Tinsley, Susan         1\n",
      "Sledge, Gary           1\n",
      "Phillips, Benjamin     1\n",
      "Vedder, Trey           1\n",
      "Name: Name, Length: 92144, dtype: int64\n",
      "male      56114\n",
      "female    43886\n",
      "Name: Sex, dtype: int64\n",
      "NaN              4623\n",
      "A/5               602\n",
      "C.A.              177\n",
      "SC/PARIS          145\n",
      "SOTON/O.Q.         80\n",
      "                 ... \n",
      "326248              1\n",
      "32944               1\n",
      "46023               1\n",
      "STON/O 432207       1\n",
      "W./C. 326044        1\n",
      "Name: Ticket, Length: 75332, dtype: int64\n",
      "NaN       67866\n",
      "C19828        6\n",
      "C11283        5\n",
      "B11110        5\n",
      "C13699        5\n",
      "          ...  \n",
      "C3851         1\n",
      "A3420         1\n",
      "E16183        1\n",
      "D14693        1\n",
      "A14341        1\n",
      "Name: Cabin, Length: 26993, dtype: int64\n",
      "S      72139\n",
      "C      22187\n",
      "Q       5424\n",
      "NaN      250\n",
      "Name: Embarked, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# смотрим частоты категорий ( переменных c типом 'object' )\n",
    "for col in data.dtypes[data.dtypes == 'object'].index:\n",
    "    print(data[col].value_counts(dropna=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "neural-trust",
   "metadata": {
    "papermill": {
     "duration": 0.054876,
     "end_time": "2021-04-22T11:14:28.215317",
     "exception": false,
     "start_time": "2021-04-22T11:14:28.160441",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# смотрим дублирующие наблюдения:\n",
    "display(data[data.duplicated(keep=False)])\n",
    "\n",
    "#удаляем дубли на месте, оставляя первое встретившееся наблюдение:\n",
    "data = data.drop_duplicates(subset=None,keep='first')\n",
    "\n",
    "# смотрим снова дублирующие наблюдения:\n",
    "data[data.duplicated(keep=False)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "missing-prairie",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:28.330014Z",
     "iopub.status.busy": "2021-04-22T11:14:28.329348Z",
     "iopub.status.idle": "2021-04-22T11:14:28.349360Z",
     "shell.execute_reply": "2021-04-22T11:14:28.348763Z"
    },
    "papermill": {
     "duration": 0.079589,
     "end_time": "2021-04-22T11:14:28.349489",
     "exception": false,
     "start_time": "2021-04-22T11:14:28.269900",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    57226\n",
      "1    42774\n",
      "Name: Survived, dtype: int64\n",
      "3    41006\n",
      "1    30315\n",
      "2    28679\n",
      "Name: Pclass, dtype: int64\n",
      "NaN     3292\n",
      "25.0    2354\n",
      "23.0    2345\n",
      "26.0    2320\n",
      "24.0    2298\n",
      "        ... \n",
      "78.5       1\n",
      "80.5       1\n",
      "14.5       1\n",
      "13.5       1\n",
      "87.0       1\n",
      "Name: Age, Length: 174, dtype: int64\n",
      "0    73308\n",
      "1    19758\n",
      "2     3703\n",
      "3     1635\n",
      "4     1168\n",
      "8      296\n",
      "5      132\n",
      "Name: SibSp, dtype: int64\n",
      "0    73540\n",
      "1    12996\n",
      "2    11236\n",
      "3      983\n",
      "4      446\n",
      "5      331\n",
      "9      264\n",
      "6      204\n",
      "Name: Parch, dtype: int64\n",
      "NaN       134\n",
      "9.85       87\n",
      "9.27       87\n",
      "9.79       86\n",
      "9.20       85\n",
      "         ... \n",
      "142.19      1\n",
      "161.04      1\n",
      "290.84      1\n",
      "217.63      1\n",
      "55.06       1\n",
      "Name: Fare, Length: 15936, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# смотрим частоты числовых значений\n",
    "for col in data.dtypes[data.dtypes != 'object'].index:\n",
    "    print(data[col].value_counts(dropna=False))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "flying-bubble",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:28.511929Z",
     "iopub.status.busy": "2021-04-22T11:14:28.465964Z",
     "iopub.status.idle": "2021-04-22T11:14:28.520046Z",
     "shell.execute_reply": "2021-04-22T11:14:28.519526Z"
    },
    "papermill": {
     "duration": 0.115894,
     "end_time": "2021-04-22T11:14:28.520191",
     "exception": false,
     "start_time": "2021-04-22T11:14:28.404297",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Survived        0\n",
      "Pclass          0\n",
      "Name            0\n",
      "Sex             0\n",
      "Age          3292\n",
      "SibSp           0\n",
      "Parch           0\n",
      "Ticket       4623\n",
      "Fare          134\n",
      "Cabin       67866\n",
      "Embarked      250\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# смотрим еще наличие пропусков\n",
    "print(data.isnull().sum())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "frank-coast",
   "metadata": {
    "papermill": {
     "duration": 0.054918,
     "end_time": "2021-04-22T11:14:28.630480",
     "exception": false,
     "start_time": "2021-04-22T11:14:28.575562",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Оценим графически распределение переменных :"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "fatty-contact",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:28.748980Z",
     "iopub.status.busy": "2021-04-22T11:14:28.747974Z",
     "iopub.status.idle": "2021-04-22T11:14:28.752239Z",
     "shell.execute_reply": "2021-04-22T11:14:28.751626Z"
    },
    "papermill": {
     "duration": 0.066725,
     "end_time": "2021-04-22T11:14:28.752383",
     "exception": false,
     "start_time": "2021-04-22T11:14:28.685658",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# функция, которая строит гистограммы\n",
    "# распределения и графики квантиль-квантиль\n",
    "def plot_hist(df):\n",
    "    # создаем копию датафрейма\n",
    "    df_ = df.copy()\n",
    "    # отбираем столбцы, у которых больше 3 уникальных значений\n",
    "    df_ = df_.loc[:, df.apply(pd.Series.nunique) > 3]\n",
    "    # из этих столбцов отбираем только количественные\n",
    "    #num_cols = df_.select_dtypes(include=['number']).columns\n",
    "    #num_cols = df_.select_dtypes(exclude='object').columns.tolist()\n",
    "    num_cols = df_.dtypes[data.dtypes != 'object'].index.tolist()\n",
    "    for col in num_cols:\n",
    "        df_[col].fillna(df_[col].median(), inplace=True)\n",
    "        # строим гистограмму\n",
    "        sns.distplot(df_[col], fit=norm)\n",
    "        fig = plt.figure();\n",
    "        # строим график квантиль-квантиль\n",
    "        stats.probplot(df_[col], plot=plt)\n",
    "        fig = plt.figure();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "descending-executive",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:28.866888Z",
     "iopub.status.busy": "2021-04-22T11:14:28.866127Z",
     "iopub.status.idle": "2021-04-22T11:14:33.671137Z",
     "shell.execute_reply": "2021-04-22T11:14:33.670610Z"
    },
    "papermill": {
     "duration": 4.864217,
     "end_time": "2021-04-22T11:14:33.671281",
     "exception": false,
     "start_time": "2021-04-22T11:14:28.807064",
     "status": "completed"
    },
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.7/site-packages/seaborn/distributions.py:2557: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n",
      "  warnings.warn(msg, FutureWarning)\n",
      "/opt/conda/lib/python3.7/site-packages/seaborn/distributions.py:2557: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n",
      "  warnings.warn(msg, FutureWarning)\n",
      "/opt/conda/lib/python3.7/site-packages/seaborn/distributions.py:2557: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n",
      "  warnings.warn(msg, FutureWarning)\n",
      "/opt/conda/lib/python3.7/site-packages/seaborn/distributions.py:2557: FutureWarning: `distplot` is a deprecated function and will be removed in a future version. Please adapt your code to use either `displot` (a figure-level function with similar flexibility) or `histplot` (an axes-level function for histograms).\n",
      "  warnings.warn(msg, FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEWCAYAAACNJFuYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8+yak3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAveUlEQVR4nO3dd5hURdbH8e8BMSAqqJiIBmQZUBEHs64rroE175oDKIqrGNeI6OquGUwYEQFBRXxRUVERRTAHZMgIBhZBQdQxYEIlnfePuiPNTM9Mz0x3356e3+d5+umb69BAn65bt6rM3REREUlUL+4AREQk9yg5iIhIGUoOIiJShpKDiIiUoeQgIiJlKDmIiEgZSg5Sp5mZm9l21Tx3vpkdUM6+fczso2THmtmVZjaoehFXKb79zGxhpsuR/KTkILVO9EX7q5n9bGZfmdlQM2sUd1yJ3P1Nd29bzr4b3f0MADNrHSWotapTjpl1N7OV0Wfxo5lNM7NDq3GdoWZ2fXVikPyk5CC11WHu3gjoBBQCV5U+oLpfuLXQu9Fn0RgYDIw0sybxhiS1nZKD1Gruvgh4EegAf9wm6mVmnwCfRNvONLO5ZvadmY02s61KXaarmc0zs2/MrJ+Z1YvO29bMJpjZt9G+4WbWuNS5nc1stpl9b2YPmdm60bnl3tIxs2vN7NFo9Y3ofUn06//PUZw7JBy/mZktNbOmlXwWq4AhwHrAtknKbWdmr5nZEjP7wMwOj7b3BE4CLotieK6icqRuUHKQWs3MWgBdgakJm48EdgMKzGx/4CbgWGBLYAHweKnLHEWofXQCjgBOL7l8dO5WQDugBXBtqXNPAg4ifBlvT5IaTCX2jd4bu3sjd389iu/khGNOAMa7e3FFF4pqSmcAPxMlxoR9DYDngJeBzYDzgOFm1tbdBwLDgb5RDIdV8c8geUjJQWqrZ8xsCfAW8DpwY8K+m9z9O3f/lfDlPcTdp7j770BvYA8za51w/C3R8Z8BdxK+jHH3ue4+zt1/j76Ybwf+XCqOe9z9c3f/Drih5NwaGgacYGYWrZ8CPFLB8btHn8WXUflHufsPpY8BGgE3u/syd58APJ+meCUP1ZV7spJ/jnT3V8rZ93nC8lbAlJIVd//ZzL4FmgHzkxy/IDoHM9sc6A/sA2xA+DH1fQVl/XFuTbj7RDNbCuxnZouB7YDRFZzynrvvXclltwI+j249lVhA+BxEylDNQfJR4lDDXwCtSlbMbH1gE2BRwjEtEpZbRudAqI04sIO7b0i41WOsqbxzqxNromFReacAT7r7b1W8bmlfAC1K2lMiLVn9OWh4ZlmDkoPkuxHAaWbW0czWIXzhT3T3+QnHXGpmTaL2iwuA/4u2b0C4f/+DmTUDLk1y/V5m1tzMNgb6JJybqmJgFbBNqe2PEtpCTgYeruI1k5kILCU0Ojcws/2Aw1jd/vJVkhikDlNykLwW3Xq6GngKWExoOD6+1GHPApOBacALhMdBAf5DaKT+Ido+KkkRjxEaeecB/wOq1FfA3ZcS2irejp4i2j3a/jnhdpgDb1blmuWUs4yQDA4BvgHuA0519w+jQwYTGvCXmNkzNS1Paj/TZD8iucnMhgBfuHtVn4ASqTE1SIvkoOhpqqOBnWMOReoo3VYSyTFmdh0wC+jn7p/GHY/UTbqtJCIiZajmICIiZeRFm8Omm27qrVu3jjsMEZFaZfLkyd+4e9Ixu/IiObRu3ZqioqK4wxARqVXMbEF5+zJ+W8nMhpjZ12Y2K2FbPzP70MxmmNnTiSNdmlnvaATNj8zsoEzHJyIiZWWjzWEocHCpbeOADu6+I/AxYTA0zKyA0EGpfXTOfWZWPwsxiohIgownB3d/A/iu1LaX3X1FtPoe0DxaPgJ4PBoF81NgLrBrpmMUEZE15cLTSqcTJmuBMEJk4iiXCyln1Egz62lmRWZWVFxc4TD3IiJSRbEmBzPrA6wgTDRSJe4+0N0L3b2wadMKJ8gSEZEqiu1pJTPrDhwKdPHVPfEWseYQyM1Zc2hlERHJglhqDmZ2MHAZcHg0KmWJ0cDxZraOmW0NtAHejyNGEZG6LBuPso4A3gXamtlCM+sB3EMYK3+cmU0zswEA7v4BMBKYDYwFern7ykzHKCJS6yxfDjffDJMmZeTyGb+t5O7J5qgdnGRbyfE3EMa3FxGRZKZOhR49wvvll0PnzmkvIheeVhIRkVT89hv06ROSwRdfwJNPhtpDBuTF8BkiInnv7bdDbeGjj+C00+C226BJk4wVp5qDiEgu++knOO882GefUHN46SUYMiSjiQGUHEREctdLL0GHDnDvvSFBzJoFBx6YlaKVHEREcs1330H37nDwwdCwIbz5JvTvD40aZS0EJQcRkVzy1FNQUACPPhoan6dOhb32ynoYapAWEckFixfDuefCqFHQqROMHQsdO8YWjmoOIiJxcoeHHgq1hRdeCI+mTpwYa2IA1RxEROIzfz707AnjxoWnkQYNgu23jzsqQDUHEZHsW7kS7rorPIn07rvhaaTXXsuZxACqOYiIZNecOXDGGfDOO+FppAcegJYt446qDNUcRESyYflyuOGG0Jbw4YfwyCMwZkxOJgZQzUFEJPMmTw5DX0yfDsceC3ffDZttFndUFVLNQUQkU379Fa64AnbbDb7+Gp5+Gv7v/3I+MYBqDiIimfHGG6Ft4ZNPQq3h1luhceO4o0qZag4iIun044/Qqxf8+c+wYgW88kp4RLUWJQbIzkxwQ8zsazOblbBtYzMbZ2afRO9Nou1mZneZ2Vwzm2FmnTIdn4hI2rz4Yng89f774cILYeZM6NIl7qiqJRs1h6HAwaW2XQGMd/c2wPhoHeAQwrzRbYCewP1ZiE9EpGa+/RZOPRW6doUNNgiPqd5xB6y/ftyRVVvGk4O7vwF8V2rzEcCwaHkYcGTC9oc9eA9obGZbZjpGEZFqcYeRI6FdOxgxAv79b5gyBXbfPe7IaiyuBunN3X1xtPwlsHm03Az4POG4hdG2xYiI5JIvvoBzzoFnn4XCwtC2sOOOcUeVNrE3SLu7A17V88ysp5kVmVlRcXFxBiITEUnCHQYPDgPlvfQS9OsXhsDIo8QA8SWHr0puF0XvX0fbFwEtEo5rHm0rw90Hunuhuxc2bdo0o8GKiAAwbx4ccEB4RLVjx9DgfMklsFb+9QqIKzmMBrpFy92AZxO2nxo9tbQ78EPC7ScRkXisXAl33gk77ACTJsGAATBhAmy3XdyRZUzG052ZjQD2AzY1s4XANcDNwEgz6wEsAI6NDh8DdAXmAkuB0zIdn4hIhT74IHRimzgR/va3kBiaN487qozLeHJw9xPK2VXm4d+o/aFXZiMSEUnBsmVh4p3rr4eNNoLHHoPjjwezuCPLivy7USYiUlOTJoXawsyZcMIJ0L8/1LG2zdifVhIRyRlLl8Kll4Z+Ct99B6NHhxpDHUsMoJqDiEjw2mtw5pkwd26YurNv33A7qY5SzUFE6rYffoB//hP+8pfQh2HChDA7Wx1ODKDkICJ12fPPQ/v28OCDob/CjBkhSYiSg4jUQcXFcOKJcNhh0KRJ6OHcrx80bBh3ZDlDyUFE6g73MEBeQQE8+ST85z9hCs9dd407spyjBmkRqRsWLoSzzw63knbdNYyP1KFD3FHlLNUcRCS/rVoFAweGtoXx4+H228N8C7U8MQwfDq1bQ7164X348PReX8lBRPLX3LlhJrazzgrDas+cCRddBPXrxx1ZUqW/8M85J3kCGD48PG27YEG4U7ZgQVhPZ4KwMGJF7VZYWOhFRUVxhyEiuWLFijBQ3tVXw9prw223hR7POTz0RckX/tKl5R/TsGGoBPXpExJCaa1awfz5qZdpZpPdvTDZPrU5iEh+mTkzJIJJk+Dww+G++6BZs7ijAkICKPliNwu/+iHUDFatqvz8pUvD+Z99lnx/edurQ7eVRCQ//P47XHMNdOoUfj4//jg880zsiWH4cNh005AMTj559S/+xJs2qSSGEp99Bi1bJt9X3vbqUHIQkdpv4kTYZRf473/DyKmzZ8Nxx2X1NtLw4dCoUSgy8XXyyfDtt+krp2VLuOGGsl0yGjYM29NFyUFEaq9ffoF//Qv22CMMg/H88/DII+GnehYccMCaSeCXXzJbXkkCOOmk0PbQqlUou1WrsH7SSekrS20OIlI7TZgQBsqbNy/0X7j5Zthww6wVf8AB4cnYTGnVCrp2hTFjVt9KKkkMEN7TmQxKU3IQkdplyZIwrPagQdCmDbz+Ouy7b0aLPOccuP/+jBbxh5InkjL5xZ+KWJODmV0EnAE4MJMwLeiWwOPAJsBk4BR3XxZbkCKSO559NtQSvvoKLrsMrr0W1lsvrUU0bAi//prWS1aq5GmlVq3WrB3EKbY2BzNrBpwPFLp7B6A+cDxwC3CHu28HfA/0iCtGEckRX38dGpqPPDJMvDNxItxyS40SQ/36ZRuPzbKTGDbZBB59NDyx5A4rV4b3+fNzIzFA/A3SawHrmdlaQENgMbA/8GS0fxhwZDyhiUjs3MO3aLt28PTTcN11UFQUejvXQP36VXt8NB0aNVqdEL75JneSQHliSw7uvgi4FfiMkBR+INxGWuLuK6LDFgJJH1I2s55mVmRmRcXFxdkIWUSy6fPP4dBD4ZRTYPvtYepUuOoqaNCgypcaPnzN2kGmE0NiIih5/fRT7ieERLG1OZhZE+AIYGtgCfAEcHCq57v7QGAghOEzMhCiiMRh1aowE9tll4Xl/v2hV68qj4cUx0gZXbrAK69kv9xMiPO20gHAp+5e7O7LgVHAXkDj6DYTQHNgUVwBikiWffwx7LdfeDxo991h1iw4//xKE0OzZmXbDrItnxIDxJscPgN2N7OGZmZAF2A28Crwj+iYbsCzMcUnItmyYgX07Qs77RTGRhoyBF5+GbbeutxTEhPBF19kMVZCIki8ZeSeX4kB4m1zmEhoeJ5CeIy1HuE20eXAv8xsLuFx1sFxxSgiWTB9Ouy2G1x+ORxySBj64rTTKvz5n82aQem2g3xMBMnE2s/B3a8Brim1eR6gOftE8t3vv8P114eezRtvDE88AX//e7nf/NlICPl2a6gm1ENaRLLvnXfgjDNgzhzo1i3Mt7DJJmscku12AyWGNSk5iEj2/PxzmJDg7ruhRQsYOxYOOgjIfjLIg3nOMiruTnAiUleMGwc77AB33QW9erHBZ7Owgw/K2tNFW221ZruBVEw1BxHJrO+/h4svhocegrZt4c03sX32znixSgA1o5qDiGTO009DQQE8/DD07s26H03LaGJo3Fg1g3RRchCR9PvySzjmGDj6aKZ+uQWdVr6P3XQjv7Nuxops3DhUUiQ9lBxEJH3c6WbD+G7LAn578jl6cyO78j5T6ZT2otZbb802BCWG9FJyEJH0WLCAsfUOYRjdmU0BHZnGzfRmBVUfKC+ZxFtG7rB0aVouK+VQchCRmlm1inPtHn5u3Z69eYtzuZt9eYOP+FONL62aQXyUHESkWsygrX3EW/X35R7O4y32pj0fcC/n4jX4atHjprmhSn+DZlbPzLI3g7eI5JSSPgkNbDlXcBPT2YkCZtONoRzCi3xGqxpdXwkhd1SaHMzsMTPb0MzWB2YBs83s0syHJiK5oPQw2B2Zyvvsyk1cyXMcRgGzeZhuQPV6sqmmkJtSqTkUuPuPhOk6XyRMznNKJoMSkdyQ2HN5HX7jRnozic5swZcczVMcyxN8xRZVvq4SQu5LpYd0AzNrQEgO97j7cjPTX6lIHis9nMVevMVgetCWjxnCaVzMbSyhSZWuqURQu6RSc3gAmA+sD7xhZq2AHzMZlIhkX7JZ1BrxE3dzLm+xD2uzjL/yMj0YosRQB1Rac3D3u4C7EjYtMLO/ZC4kEcmWiga8O5CXGEhPWvA5/TmfPtzALzRK+dpKCLVbKg3Sm5vZYDN7MVovIEzfWWNm1tjMnjSzD81sjpntYWYbm9k4M/skeq/aTxQRSUl5iaEJ3zGUbrzEwSylIXvzFhfSP6XEoLaE/JHKbaWhwEvAVtH6x8CFaSq/PzDW3f8E7ATMAa4Axrt7G2B8tC4iaZQ8MTh/50nm0I4TeYzr6cPOTOVd9qzwWkoI+SmV5LCpu48EVgG4+wpgZU0LNrONgH2J5oh292XuvgQ4AhgWHTaM0BAuIjWUrE2hxBYs5in+zpMcw0Ka05lJXM31FQ6Up4SQ31JJDr+Y2SaAA5jZ7sAPaSh7a6AYeMjMpprZoKgvxebuvjg65ktg8zSUJVJnVTyZjtOdh5hNAYfwIpdxC7sxkel0rPCaSgr5L5Xk8C9gNLCtmb0NPAycl4ay1wI6Afe7+87AL5S6heTuTpSUSjOznmZWZGZFxcXFaQhHJH9UVEso0ZpPeZkDeYjTmckO7MR0+nEZK8t5TkW3j+qWSpODu08B/gzsCZwFtHf3GWkoeyGw0N0nRutPEpLFV2a2JUD0/nU5cQ1090J3L2zatGkawhHJD5VNuVmPlZzHXcyiA7vzHmdzH/vxGp+wfZljlRDqrkofZTWzU0tt6mRmuPvDNSnY3b80s8/NrK27fwR0AWZHr27AzdH7szUpR6QuqSwxtGM2gziDPXmXMRzCPxnA57Qsc5ySgaTSQ7pzwvK6hC/xKYTbSzV1HjDczNYG5gGnEWozI82sB7AAODYN5YjktcqSwlos53Ju4Wqu4yc24GQeYTgnkWw8JCUGgdQ6wa3RvmBmjYHH01G4u08DCpPs6pKO64vks8oSQolOTGYIp7MTM3ic4zifuyhmszLHKSlIouoMuv4L4UkjEYlBZQ3NJdblV27mct5nV5pSzBE8wwk8vkZiUJuClCeVNofnWP3EUD2gABiZyaBEJLlUawv78AaDOIPt+YQHOYNL6ccPNP5jv5KBVCaVNodbE5ZXAAvcfWGG4hGRcqSSGDbgR27mCs7hfuaxNV14hQkJd2mVFCRVqbQ5vJ6NQEQkuVRrC4cwhgc4i2Ys4nYu4mquYynr/7FfiUGqotzkYGY/kbwDmhH6p2m6UJEMSyUxbMI33MmFnMxwPqCAY3iCiez+x34lBamOcpODu2+QzUBEZE2VJwbnWEZyN+fRhO+5lmu4id4sY52wV0lBaiCVNgcAzGwzWD0Kl7t/lpGIRKTSxLAlX3A/Z3MEo5lEIV0Yzyx2UEKQtEllPofDzewT4FPgdcKscC9mOC6ROqnyx1SdHgxiNgUcyMtczK3swbtKDJJ2qfRzuA7YHfjY3bcmdFB7L6NRidRBldUWtuF/vMIBDOJMptGRHZjJ7VzMStZSYpC0SyU5LHf3b4F6ZlbP3V8lea9mEamGymoL9VjJRdzOTHagM5PoyQPszwT+x3bqwCYZk0qbwxIzawS8QRgH6WtCL2kRqaHKagvtmcVgerAb7/Mch3I297OI5koIknHl1hzM7BgzW5cwM9tS4CJgLPA/4LDshCdSNzVgGf/mP0yhE9swjxN4jMMZzSKaxx2a1BEV1RxOBO4lzB89AnjJ3YdVcLyIpKhJE1iyJPm+QiYxhNPZgVkM50Qu5E6+YfWcJao1SDaUW3Nw96OA7YBXCENrLzSzAWb252wFJ5KPzJInhvVYSj8u4T12pwnfcxijOZnhfyQGtS9INlXYIO3uP7r7MHc/BOgATAXuMrPPsxKdSJ4pr41hP15lBjtyCbfxIGfSng94Prp7q6QgcUhpyG4zawIcDRwHbEyY0lNEqiBZYtiQHxjAWbzK/gD8hQmczQB+ZCNASUHiU9HYSo2Ao4ATgJ2B0YQ+D6+565+sSE0dynMM4J9swZf04xKu4T/8SsM/9ut/mcSpogbp+YSnk+4jNEYvz0QAZlYfKAIWufuhZrY1Yaa5TYDJwCnuviwTZYtkQ+kaw6YU058LOJERzGAHjuQZitaYjVeJQeJX0W2lFu5+srs/n6nEELkAmJOwfgtwh7tvB3wP9Mhg2SJpV9KprWznNucEHmMO7fgHT/Jv/kMhRUoMkpMqelrp10wXbmbNgb8Bg6J1A/ZndZvGMODITMchki7lNTg3YyGjOZzHOIm5bMfOTOU6/s1y1v7jGDU8Sy6pzhzS6XQncBmwKlrfBFji7iui9YVAs2QnmllPMysys6Li4uKMBypSHcYqevIAsymgC+O5iNvZi7eZTfs1jlNSkFwTW3Iws0OBr919cnXOd/eB7l7o7oVNmzat/ASRDEo2PtJ2fMIE9ucB/skkOtOBWdzJRayifjxBilRBRU8rPUfymeAAcPfDa1j2XsDhZtaVME/EhkB/oLGZrRXVHpoDi2pYjkhGlU4K9VnBhdzJdVzN76xDDwYxhNMJkyiWpVqD5KKKag63ArcR5nH4FXgwev1MGF+pRty9t7s3d/fWwPHABHc/CXgV+Ed0WDfg2ZqWJZIppRPDDszgXfbgVi7lJQ6igNkMoQdKDFLbVDRN6OsAZnabuycO0f2cmRVlMKbLgcfN7HpCj+zBGSxLpNoSE8Pa/M6V3MiV3Mj3NOFY/o8nOAYlBamtUhmye30z28bd5wFE/RDWT2cQ7v4a8Fq0PA/YNZ3XF0m3xMSwG+8xmB60ZzaPcDIXciffsUmZc5QQpDZJJTlcBLxmZvMIP4NaAWdlNCqRHFaSGBryC9dzFRfQn0U0oysv8CJdk56jxCC1TaXJwd3Hmlkb4E/Rpg/d/ffMhiWSexJrC/szngc5k234lHs5h97cxE9smPQ8JQapjSp9lNXMGgKXAue6+3SgZfQYqkidUZIYNmIJD3IG4zmAFazFvrzOudybNDGoU5vUZqn0c3gIWAbsEa0vAq7PWEQiOaYkMRzOs8ymgO4M5WYuZyem8yb7Jj1HSUFqu1SSw7bu3hdYDuDuSynvEQyRPGMGm/EVj3Mcz3IkX7MZuzGR3tzMb6yX9JwuXbIcpEgGpJIclpnZekQd4sxsW0BtDpLXQo9n52QeYTYFHMkz9OF6OjOJKexS7nldusArr2QxUJEMSeVppWsIQ3e3MLPhhJ7N3TMZlEhcSm4hteAzBvBPuvIi77AHPRjMh7Sr8FzdSpJ8UmFyMLN6QMkscLsTbidd4O7fZCE2kawyCwPl/ZMB3MLl1GMV59Ofe+lV6XhISgySbypMDu6+yswuc/eRwAtZikkk68ygDR8ziDPYlzd5mb/Sk4EsoHWF5ykpSL5Kpc3hFTO7xMxamNnGJa+MRyaSBWawlq3gMm5hBjuyAzPpzkMcxEuVJgaRfJZKm8Nx0XuvhG0ObJP+cEQyL7Ez205MYzA92IUpjOIoenEvX7JlStdRrUHyWSo9pLfORiAimVR69NR1+I2ruY7LuYVv2JS/8ySj+HtK11JSkLogpR7SZnaVmQ2M1tuoh7TUJqUTwx68w1R2pg838ignU8DslBKDejxLXVKVHtJ7RuvqIS21QunZ2dbnZ/pzPm+xNw1ZykGM5TSG8j2VN6EpKUhdox7SkneSTdn5V15mFh04l3u4l150YBYvc1BK11NikLpIPaQlL5QkhNJJoTHfM4TTeJmD+I112Zc3OJ+7+ZkNKr2mbiNJXZZKcijdQ3o8cFlNC44ejX3VzGab2QdmdkG0fWMzG2dmn0TvTWpaluS30gmhxFGMYjYFnMIj3EhvOjKNt9m70uspKYikkBzcfRyhh3R3YARQGM3cVlMrgIvdvYDQ+7qXmRUAVwDj3b0NIRFdkYayJE8lSwyb8yVP8A9G8Xe+ZAs6M4k+3MjvrFvudUoSgpKCSFDuo6xm1qnUpsXRe0sza+nuU2pSsLsvLrmmu/9kZnOAZsARwH7RYcMI04deXpOyJD+VTQxON4ZxO/+iIUu5gpu4jYtZQYNyr6FkIJJcRf0cbove1wUKgemEhugdgSJWz+9QY2bWGtgZmAhsHiUOgC+BzdNVjuSHZLWFVsznAc7iIF7mTfbmDAbxMW0rvI4Sg0j5yr2t5O5/cfe/EH7dd3L3QnffhfAlvihdAZhZI+Ap4EJ3/7FUDE7UEJ7kvJ5mVmRmRcXFxekKR3Jc6cRgrOJc7mYWHdiTd+jFPfyZ18tNDLp9JJKaVBqk27r7zJIVd58FlYxdnCIza0BIDMPdfVS0+Ssz2zLavyXwdbJz3X1glLAKmzZtmo5wJMc1bLjmels+5A325e6o70IHZnEfvfAk/6yVEESqJpXkMNPMBpnZftHrQWBGTQs2MwMGA3Pc/faEXaOBbtFyN+DZmpYl+eHXX8P7WiynNzcynZ0oYDanMoxDeJHPaFXmHCUFkepJZeC97sDZwAXR+hvA/Wkoey/gFELymRZtuxK4GRhpZj2ABcCxaShL8sTOTGEwPdiZaTzBPziXe/i6nGYpJQWR6qtssp/6wItR28Md6SzY3d+i/J7WmoVX1rCe/cqN/JdL6UcxTTmKUTzDUUmPVVIQqbnKJvtZaWarzGwjd/8hW0GJrOGtt5hGD9ryMYM5nUu4lSUk7xupxCCSHqncVvqZcOtnHPBLyUZ3Pz9jUYkA/PQT9O4N997L2rTmAMYxngOSHqqkIJJeqSSHUdFLJHtefBHOOgsWLuROLuAqrucXGsUdlUidkUpy+D9gu2h5rrv/lsF4pK779lu46CJ45BFo1449/G3eS19/SxFJUbmPsprZWmbWF1hIGMbiYeBzM+sb9U8QSR93eOIJKCiAESPgqqtYZ87UlBKDbimJpF9F/Rz6ARsDW7v7Lu7eCdgWaAzcmoXYpK5YvBiOPhqOPRZatICiIuz661jGOnFHJlJnVZQcDgXOdPefSjZEw1ucDXTNdGBSB7jDkCHQrh2MHQt9+8J772Edd6rSJUQk/SpKDh6NbVR640rKGe9IJGWffgoHHgg9esBOO8H06dhll2INUmkGE5FMqyg5zDazU0tvNLOTgQ8zF5LktZUroX9/6NABJk7k/Ab3U++NV7G221f5Uqo1iGRORT/TegGjzOx0YHK0rRBYD8rpmipSkdmzQ03hvfcYwyGcxQMspEW1LqXEIJJZ5SYHd18E7GZm+wPto81j3H18ViKT/LFsGdxyC1x/Pd8s24ALeJTHOJHyR0+pmBKDSOZVeoPX3ScAE7IQi+SjoqJQW5gxgxEczwX0p5jN4o5KRCqRypDdIlViFgbK62uXsbLzbiya8Q2H8ywnMqLGiUG1BpHs0KMhUiPJpuzcl9cZxBm0YS4DOZPL6MsPNK5ROUoKItmlmoNUyqz8V6IN+JH7OJvX2Y96rGJ/xnMWA2uUGDRZj0g8lBykQslqBsl05QU+oD09Gcht/IsdmcGr7F+tMjXPs0j8lBzySLNmFf/Kr86rMpvwDY9wMi9wKD+wEXvyDpdwG0tZv8rxKyGI5I6cTQ5mdrCZfWRmc83sinRff/hwaN0a6tUL78OHl7/vnHNWr2+6aXiZhfV0fxnX5PXFF+n+lCriHMfjzKEdxzKSa7mGTkzhfXar3tWUFERySk42SEfTk94L/JUwKuwkMxvt7rPTcf3hw6FnT1i6NKwvWBDWS5Ted3/CjNnffrt6ua5+oW3FIu7jHI5gNO/TmR4MZhY7VPk6dfXzE6kNcjI5ALsS5o6YB2BmjwNHAGlJDn36rP7yL7F0adhesizJOGcwiFu5hAYs52Ju5U4uZBX1Kz9TiUCkVsnV5NAM+DxhfSGseb/CzHoCPQFatmxZpYt/9lnVtgtsw/94kDPZn1d5lf04kwf53x9zQK1JiUCk9svZNofKuPtAdy9098KmTZtW6dzycknLluXvq6vqsZKLuJ2Z7MAuTKYnD9CF8fy61XZrPFWkJ4xE8kuuJodFsMaIbM2jbWlxww3QsOGa2xo2DNuT7aur2jOLd9iT27mY8XShPR/wID3Zcqt6LErb34aI5KJcTQ6TgDZmtrWZrQ0cD4xO18VPOgkGDoRWrcJTPq1ahfWTTkq+7+yzV69vskl4Qep9AOJU3q/7Cl+/L8Ov/Q+zGnRit03nwYgRHLZqNAu9Oe4oMYjUAZZkPp+cYGZdgTuB+sAQd7+hvGMLCwu9qKgoW6Hlt/ffDwPlzZoFJ54Y5l7YdNO4oxKRDDCzye5emGxfrjZI4+5jgDFxx1FnLF0KV18Nd94JW24Jzz0Hhx4ad1QiEpOcTQ6SRa++CmecAfPmwVlnhbkXNtoo7qhEJEa52uYg2fDDD6HH3/77hwaUV1+FAQOUGEREyaHOeu45KCiAwYPh0kthxgzYb7+4oxKRHKHkUNcUF8MJJ8Dhh4fHriZOhL599fyuiKxByaGucA+DSrVrB089Bf/9b5jCszDpgwoiUsepQbou+Pzz0FnjhRdgt93CraT27eOOSkRymGoO+WzVqtDA3L59aGy+4w54+20lBhGplGoO+eqTT+DMM+H116FLl9Dte5tt4o5KRGoJ1RzyzYoV0K8f7LgjTJsWbiGNG6fEICJVoppDPpk+PQx9MXkyHHEE3HcfbLVV3FGJSC2kmkM++P33MPRFYWFofB45Ep5+WolBRKpNNYfa7t13Q21hzhw45ZTQ6FwybKyISDWp5lBb/fILXHgh7LUX/PwzjBkDDz+sxCAiaaGaQ230yivhSaT58+Gcc+Cmm2DDDeOOSkTyiGoOtcmSJeEW0l//Cg0awBtvwL33KjGISNopOdQWzzwTBsobNgyuuCI8mbTPPnFHJSJ5KpbkYGb9zOxDM5thZk+bWeOEfb3NbK6ZfWRmB8URX0756is49lg46ijYbLMwUN5NN8F668UdmYjksbhqDuOADu6+I/Ax0BvAzAoI80W3Bw4G7jOz+jHFGC/30MDcrh08+yzccANMmgS77BJ3ZCJSB8SSHNz9ZXdfEa2+BzSPlo8AHnf33939U2AusGscMcbqs8+ga1fo1g3+9KfQ0/nKK0M7g4hIFuRCm8PpwIvRcjPg84R9C6NtZZhZTzMrMrOi4uLiDIeYJatWhQbm9u3hzTfhrrvCe7t2cUcmInVMxh5lNbNXgC2S7Orj7s9Gx/QBVgDDq3p9dx8IDAQoLCz0GoSaGz76KMzj/NZb4WmkgQOhdeu4oxKROipjycHdD6hov5l1Bw4Furh7yZf7IqBFwmHNo235a/lyuO02uPba0Mj80EPhdpJZ3JGJSB0W19NKBwOXAYe7+9KEXaOB481sHTPbGmgDvB9HjFkxdWqYfKd3b/jb38IQGN27KzGISOzianO4B9gAGGdm08xsAIC7fwCMBGYDY4Fe7r4yphgz57ffoE8f6NwZvvgCnnwyTN25RbK7cCIi2RfL8Bnuvl0F+24AbshiONn19tuhl/NHH4XbR7ffDhtvHHdUIiJryIWnleqGn3+G888PvZp/+w3GjoWhQ5UYRCQnKTlkw0svQYcOcM89cO65MGsWHKTO3yKSu5QcMum770ID88EHw7rrru670KhR3JGJiFRIySFTnnoqDJT36KOhd/O0aWHuBRGRWkDzOaTb4sXh1tGoUbDzzqFtoWPHuKMSEakS1RzSxT00MBcUwAsvwM03hxFUlRhEpBZSzSEd5s+Hnj1h3DjYe28YNAjato07KhGRalPNoSZWroS77w5PIr37bhg07/XXlRhEpNZTzaG65swJA+W98054GmnAAGjVKu6oRETSQjWHqlq+PEy807EjfPhhmJBnzBglBhHJK6o5VMWUKXD66WH+5mOOCbeUNt887qhERNJONYdU/PorXHEF7LprmNN51CgYOVKJQUTylmoOlXnzzdC28PHHYcC8fv2gSZO4oxIRySjVHMrz44/Qqxfsuy8sWxYeUx00SIlBROoEJYdkXnwxPJ56//1w4YVhoLwDKpzYTkQkryg5JPr2Wzj1VOjaNQyO9/bbcMcdsP76cUcmIpJVSg4Qhr4YORLatYMRI+Dqq8MUnnvsEXdkIiKxiDU5mNnFZuZmtmm0bmZ2l5nNNbMZZtYp40F88QUcfTQcdxy0bAmTJ8N//wvrrJPxokVEclVsycHMWgAHAp8lbD4EaBO9egL3ZzSIMWPCQHljx0LfvvDee7DjjhktUkSkNoiz5nAHcBngCduOAB724D2gsZltmbEItt8+3DqaMQMuvRTW0pO9IiIQUz8HMzsCWOTu080scVcz4POE9YXRtsVJrtGTULugZcuW1Qtku+3Ck0kiIrKGjCUHM3sF2CLJrj7AlYRbStXm7gOBgQCFhYVeyeEiIlIFGUsO7p60Y4CZ7QBsDZTUGpoDU8xsV2AR0CLh8ObRNhERyaKstzm4+0x338zdW7t7a8Kto07u/iUwGjg1emppd+AHdy9zS0lERDIr11pgxwBdgbnAUuC0eMMREambYk8OUe2hZNmBXvFFIyIioB7SIiKShJKDiIiUoeQgIiJlWLjNX7uZWTGwIItFbgp8k8Xyagt9Lsnpc0lOn0ty2fxcWrl702Q78iI5ZJuZFbl7Ydxx5Bp9Lsnpc0lOn0tyufK56LaSiIiUoeQgIiJlKDlUz8C4A8hR+lyS0+eSnD6X5HLic1Gbg4iIlKGag4iIlKHkICIiZSg51EDpObDrOjPrZ2YfRvN/P21mjeOOKU5mdrCZfRTNiX5F3PHkAjNrYWavmtlsM/vAzC6IO6ZcYmb1zWyqmT0fdyxKDtVUzhzYdd04oIO77wh8DPSOOZ7YmFl94F7CvOgFwAlmVhBvVDlhBXCxuxcAuwO99Lms4QJgTtxBgJJDTSSbA7tOc/eX3X1FtPoeYbKmumpXYK67z3P3ZcDjhDnS6zR3X+zuU6LlnwhfhM3ijSo3mFlz4G/AoLhjASWHakmcAzvuWHLY6UBdnqC7vPnQJWJmrYGdgYkxh5Ir7iT84FwVcxxADsznkKsyPQd2bVXR5+Luz0bH9CHcPhiezdik9jCzRsBTwIXu/mPc8cTNzA4Fvnb3yWa2X8zhAEoO5arOHNjRVKd5rbzPpYSZdQcOBbp43e5Eo/nQy2FmDQiJYbi7j4o7nhyxF3C4mXUF1gU2NLNH3f3kuAJSJ7gaMrP5QKG71/nRJc3sYOB24M/uXhx3PHEys7UIjfJdCElhEnCiu38Qa2Axs/CLahjwnbtfGHM4OSmqOVzi7ofGGYfaHCSd7gE2AMaZ2TQzGxB3QHGJGubPBV4iNLqOrOuJIbIXcAqwf/RvZFr0a1lyjGoOIiJShmoOIiJShpKDiIiUoeQgIiJlKDmIiEgZSg4iIlKGkoPkFDPbJOERxy/NbFG0vMTMZmc5liMTB4Uzs/+aWYWdAMu5Tmszm5Xe6KpU/pWl1t+J3mONS3KbkoPkFHf/1t07untHYABwR7TckQyMORN1VivPkYQRVUti+7e7v5LuGLJgjeTg7nvGFYjUHkoOUpvUN7MHo3kAXjaz9QDMbFszG2tmk83sTTP7U7S9tZlNiOaXGG9mLaPtQ81sgJlNBPomO9/M9gQOB/pFNZdto/P+EV2js5m9Y2bTzex9M9sgKu9NM5sSvSr8ErbgnmjOh1fMbEzC9eeXzBNiZoVm9lq0vKuZvRuN+f+OmbWNtnc3s1HRn+MTM+sbbb8ZWC/6MwyPtv2cJJb6FubjmBR9XmdF27c0szei82eZ2T41/DuU2sLd9dIrJ1/AtYRhBABaEwbz6xitjwROjpbHA22i5d2ACdHyc0C3aPl04JloeSjwPFC/kvOHAv9IiGco8A9gbWAe0DnaviFhnLKGwLrRtjZAUULss5L8+Y4mzIFRH9gKWFJSHjAf2DRaLgReSywrWj4AeCpa7h7FtBFhbJ4FQIto38+lyv25dFxAT+CqaHkdoIgwhtjFhEEVieLcIO5/F3pl56WB96Q2+dTdp0XLk4HW0eieewJPRAMhQvhyA9iD8AUM8AjQN+FaT7j7ykrOL09bYLG7TwLwaFRRM1sfuMfMOgIrge0ruc6+wAh3Xwl8YWYTKjkewpf/MDNrQ5hLpEHCvvHu/kMUy2ygFWsOG16RA4EdS2ouUTltCGNCDYkGy3sm4fOXPKfkILXJ7wnLK4H1CLdGl3hol6iKX6L36p6fzEXAV8BO0XV/q8G1VrD6tu+6CduvA15196MszIfwWsK+0p9PVf5/G3Ceu79UZofZvoRJaIaa2e3u/nAVriu1lNocpFaLfrV/ambHwB/38XeKdr8DHB8tnwS8WcXzfyIMJFjaR8CWZtY5OmeDqGF7I0KNYhVhcLn6lYT/BnBcdL9/S+AvCfvmA7tEy39P2L4Rq4f+7l7J9Ussj375V+Ql4OyS48xsezNb38xaAV+5+4OEGco6pVim1HJKDpIPTgJ6mNl04ANWT8d5HnCamc0gfFmXN5l9eec/DlwaNf5uW3Kwh2k/jwPujs4ZR/h1fx/QLdr2J1bXTsrzNPAJMBt4GHg3Yd9/gP5mVkSoBZToC9xkZlNJvWYwEJhR0iBdjkFRHFOix1sfiK6/H2HukqmEP3P/FMuUWk6jsorkCDMbCjzv7k/GHYuIag4iIlKGag4iIlKGag4iIlKGkoOIiJSh5CAiImUoOYiISBlKDiIiUsb/Awtisshj4Cg7AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# применяем функцию plot_hist()\n",
    "plot_hist(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "parental-worship",
   "metadata": {
    "papermill": {
     "duration": 0.061548,
     "end_time": "2021-04-22T11:14:33.795651",
     "exception": false,
     "start_time": "2021-04-22T11:14:33.734103",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "stable-reward",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:33.925420Z",
     "iopub.status.busy": "2021-04-22T11:14:33.924741Z",
     "iopub.status.idle": "2021-04-22T11:14:34.266001Z",
     "shell.execute_reply": "2021-04-22T11:14:34.265293Z"
    },
    "papermill": {
     "duration": 0.408244,
     "end_time": "2021-04-22T11:14:34.266146",
     "exception": false,
     "start_time": "2021-04-22T11:14:33.857902",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# загружаем тестовый  набор\n",
    "test_o =  pd.read_csv(input_path / ('test.' + d_ext), index_col=INDEX_COL)\n",
    "# If selection of predictors\n",
    "if SELECT_PRED or SELECT_PRED2:\n",
    "    test_o = test[SELECTED_FEATURES]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "signed-municipality",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:34.397426Z",
     "iopub.status.busy": "2021-04-22T11:14:34.396764Z",
     "iopub.status.idle": "2021-04-22T11:14:34.417143Z",
     "shell.execute_reply": "2021-04-22T11:14:34.416229Z"
    },
    "papermill": {
     "duration": 0.08924,
     "end_time": "2021-04-22T11:14:34.417361",
     "exception": false,
     "start_time": "2021-04-22T11:14:34.328121",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Index(['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare',\n",
       "        'Cabin', 'Embarked'],\n",
       "       dtype='object'),\n",
       " Index(['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin',\n",
       "        'Embarked'],\n",
       "       dtype='object'))"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Удаление бесполезных переменных\n",
    "data = data.drop('Name',axis=1)\n",
    "test_o = test_o.drop('Name',axis=1)\n",
    "\n",
    "data.columns, test_o.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "contained-travel",
   "metadata": {
    "papermill": {
     "duration": 0.062644,
     "end_time": "2021-04-22T11:14:34.543115",
     "exception": false,
     "start_time": "2021-04-22T11:14:34.480471",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Конструирование признаков которое можно делать до разбиения на  train/test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "organizational-paraguay",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:34.680284Z",
     "iopub.status.busy": "2021-04-22T11:14:34.678519Z",
     "iopub.status.idle": "2021-04-22T11:14:35.057077Z",
     "shell.execute_reply": "2021-04-22T11:14:35.055942Z"
    },
    "papermill": {
     "duration": 0.450624,
     "end_time": "2021-04-22T11:14:35.057279",
     "exception": false,
     "start_time": "2021-04-22T11:14:34.606655",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100000, 10) (100000, 10)\n"
     ]
    }
   ],
   "source": [
    "############## ref.: https://www.kaggle.com/jmargni/tps-apr-2021-lightgbm-cv\n",
    "############## https://www.kaggle.com/alexryzhkov/n3-tps-april-21-lightautoml-starter?scriptVersionId=59046001\n",
    "\n",
    "def create_extra_features(data):\n",
    "    # Age fillna with mean age for each class\n",
    "    age_map = data[['Age', 'Pclass']].dropna().groupby('Pclass').mean().to_dict()\n",
    "    data.Age = data.Age.fillna(data.Pclass.map(age_map['Age']))\n",
    "\n",
    "    # Cabin, fillna with 'X' and take first letter\n",
    "    data.Cabin = data.Cabin.map(lambda x: str(x)[0].strip())\n",
    "\n",
    "    # Ticket, fillna with 'X', split string and take first split \n",
    "    data.Ticket = data.Ticket.map(lambda x:str(x).split()[0] if len(str(x).split()) > 1 else 'X')\n",
    "\n",
    "    # Fare, fillna with mean value\n",
    "    # (THE ONLY FILLNA LEFT BECAUSE HERE WE USE TEST DATASET - LightAutoML can't do it in real life because of strict distinction between train and test stages)\n",
    "    data.Fare = data.Fare.fillna(data.Fare.mean())\n",
    "\n",
    "    # Embarked, fillna with 'X' value\n",
    "    all_df.Embarked = all_df.Embarked.fillna('X')\n",
    "\n",
    "    # Name, take only surnames\n",
    "    #data.Name = data.Name.map(lambda x: str(x).split(',')[0])\n",
    "    return data\n",
    "\n",
    "\n",
    "all_df = pd.concat([data, test_o]).reset_index(drop = True)\n",
    "all_df = create_extra_features(all_df)\n",
    "data, test_o = all_df[:len(data)], all_df[len(data):]\n",
    "print(data.shape, test_o.shape)\n",
    "\n",
    "test_o = test_o.drop('Survived',axis=1) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "enhanced-publicity",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:35.191867Z",
     "iopub.status.busy": "2021-04-22T11:14:35.191189Z",
     "iopub.status.idle": "2021-04-22T11:14:35.213881Z",
     "shell.execute_reply": "2021-04-22T11:14:35.214383Z"
    },
    "papermill": {
     "duration": 0.09171,
     "end_time": "2021-04-22T11:14:35.214552",
     "exception": false,
     "start_time": "2021-04-22T11:14:35.122842",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>male</td>\n",
       "      <td>40.672757</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>X</td>\n",
       "      <td>27.14</td>\n",
       "      <td>C</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>30.205570</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>X</td>\n",
       "      <td>13.35</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>0.330000</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>CA</td>\n",
       "      <td>71.29</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>19.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>A.</td>\n",
       "      <td>13.04</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>X</td>\n",
       "      <td>7.76</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99995</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>female</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>PC</td>\n",
       "      <td>14.86</td>\n",
       "      <td>D</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99996</th>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>male</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>X</td>\n",
       "      <td>11.15</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99997</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>37.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>X</td>\n",
       "      <td>9.95</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99998</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>51.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>X</td>\n",
       "      <td>30.92</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99999</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>55.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>X</td>\n",
       "      <td>13.96</td>\n",
       "      <td>n</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100000 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       Survived  Pclass     Sex        Age  SibSp  Parch Ticket   Fare Cabin  \\\n",
       "0           1.0       1    male  40.672757      2      0      X  27.14     C   \n",
       "1           0.0       3    male  30.205570      0      0      X  13.35     n   \n",
       "2           0.0       3    male   0.330000      1      2     CA  71.29     n   \n",
       "3           0.0       3    male  19.000000      0      0     A.  13.04     n   \n",
       "4           1.0       3    male  25.000000      0      0      X   7.76     n   \n",
       "...         ...     ...     ...        ...    ...    ...    ...    ...   ...   \n",
       "99995       1.0       2  female  62.000000      0      0     PC  14.86     D   \n",
       "99996       0.0       2    male  66.000000      0      0      X  11.15     n   \n",
       "99997       0.0       3    male  37.000000      0      0      X   9.95     n   \n",
       "99998       0.0       3    male  51.000000      0      1      X  30.92     n   \n",
       "99999       0.0       3    male  55.000000      0      0      X  13.96     n   \n",
       "\n",
       "      Embarked  \n",
       "0            S  \n",
       "1            S  \n",
       "2            S  \n",
       "3            S  \n",
       "4            S  \n",
       "...        ...  \n",
       "99995        C  \n",
       "99996        S  \n",
       "99997        S  \n",
       "99998        S  \n",
       "99999        S  \n",
       "\n",
       "[100000 rows x 10 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "worse-regard",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:35.346353Z",
     "iopub.status.busy": "2021-04-22T11:14:35.345646Z",
     "iopub.status.idle": "2021-04-22T11:14:35.353741Z",
     "shell.execute_reply": "2021-04-22T11:14:35.353074Z"
    },
    "papermill": {
     "duration": 0.074756,
     "end_time": "2021-04-22T11:14:35.353894",
     "exception": false,
     "start_time": "2021-04-22T11:14:35.279138",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# selection of predictors\n",
    "if SELECT_PRED:\n",
    "    # Separately, we selected the significant priediktors\n",
    "    # https://www.kaggle.com/c/tabular-playground-series-mar-2021/discussion/224530\n",
    "    # Variant 1:\n",
    "    SELECTED_FEATURES = [ # Noisy Cat Variables - 'cat5', 'cat7', 'cat8', 'cat10'\n",
    "                        'cat0', 'cat1', 'cat2', 'cat3', 'cat4', \n",
    "                        #'cat5', \n",
    "                        'cat6', \n",
    "                        #'cat7', 'cat8', \n",
    "                        'cat9', \n",
    "                        #'cat10', \n",
    "                        'cat11','cat12','cat13','cat14','cat15','cat16','cat17','cat18','cont0','cont1','cont2','cont3', \n",
    "                        'cont5', 'cont6', 'cont7', 'cont8', 'cont9', 'cont10']\n",
    "\n",
    "# selection of predictors\n",
    "if SELECT_PRED2:\n",
    "    # Separately, we selected the significant priediktors by the BoostARoota method\n",
    "    # Here they are, Variant 2 :\n",
    "    SELECTED_FEATURES = ['cat0', 'cat1', 'cat2', 'cat3', 'cat4', 'cat5', 'cat6', 'cat7', 'cat8', 'cat9', 'cat10', 'cat11', 'cat12', 'cat13', 'cat14', 'cat15', \n",
    "                         'cat16', 'cat17', 'cat18', 'cont0', 'cont1', 'cont2', 'cont3', \n",
    "                        #'cont4',\n",
    "                         'cont5', 'cont6', 'cont7', 'cont8', 'cont9', 'cont10']\n",
    "    \n",
    "if SELECT_PRED or SELECT_PRED2:\n",
    "    selfeat = SELECTED_FEATURES.copy()\n",
    "    selfeat.append(TARGET)\n",
    "    data = data[selfeat]\n",
    "    print(data.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "adaptive-practice",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:35.487146Z",
     "iopub.status.busy": "2021-04-22T11:14:35.486459Z",
     "iopub.status.idle": "2021-04-22T11:14:35.581631Z",
     "shell.execute_reply": "2021-04-22T11:14:35.582126Z"
    },
    "id": "NUTcvj39j56f",
    "papermill": {
     "duration": 0.163822,
     "end_time": "2021-04-22T11:14:35.582353",
     "exception": false,
     "start_time": "2021-04-22T11:14:35.418531",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# создаем обучающий массив признаков, обучающий массив меток,\n",
    "# тестовый массив признаков, тестовый массив меток\n",
    "train, test, y_train, y_test = train_test_split(data.drop(TARGET, axis=1), \n",
    "                                                data[TARGET], \n",
    "                                                test_size=TEST_SIZE, \n",
    "                                                stratify=data[TARGET], \n",
    "                                                random_state=SEED)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "serial-alfred",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:35.715054Z",
     "iopub.status.busy": "2021-04-22T11:14:35.714382Z",
     "iopub.status.idle": "2021-04-22T11:14:35.729478Z",
     "shell.execute_reply": "2021-04-22T11:14:35.728855Z"
    },
    "id": "5yQ9Qp9Vj56f",
    "outputId": "1488f05d-b4f5-404c-8e95-8056ed6d6c2e",
    "papermill": {
     "duration": 0.082843,
     "end_time": "2021-04-22T11:14:35.729623",
     "exception": false,
     "start_time": "2021-04-22T11:14:35.646780",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 6, 8, 9]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# создаем список количественных признаков\n",
    "num_columns = train.select_dtypes(exclude='object').columns.tolist()\n",
    "# создаем списки категориальных признаков\n",
    "cat_columns = data.select_dtypes(include='object').columns\n",
    "\n",
    "# записываем список индексов категориальных предикторов\n",
    "cat_features_idx = np.where(data.dtypes == 'object')[0].tolist()\n",
    "# выводим этот список\n",
    "cat_features_idx"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "extended-karma",
   "metadata": {
    "id": "ydsW51MDj56g",
    "papermill": {
     "duration": 0.064523,
     "end_time": "2021-04-22T11:14:35.859623",
     "exception": false,
     "start_time": "2021-04-22T11:14:35.795100",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "> # ********  Phase 1 *************"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "diagnostic-scotland",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:35.993640Z",
     "iopub.status.busy": "2021-04-22T11:14:35.993015Z",
     "iopub.status.idle": "2021-04-22T11:14:35.997628Z",
     "shell.execute_reply": "2021-04-22T11:14:35.998319Z"
    },
    "id": "ZWqH1pSAj56g",
    "papermill": {
     "duration": 0.073318,
     "end_time": "2021-04-22T11:14:35.998486",
     "exception": false,
     "start_time": "2021-04-22T11:14:35.925168",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# создаем конвейеры\n",
    "cat_pipe = Pipeline([\n",
    "    ('imputer', SimpleImputer(strategy='most_frequent')), \n",
    "    ('enc', TargetEncoder() ) ])\n",
    "num_pipe = Pipeline([\n",
    "    ('imputer', SimpleImputer(strategy='median')),\n",
    "    ('scal', None)]\n",
    ") # "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "finite-senegal",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:36.142979Z",
     "iopub.status.busy": "2021-04-22T11:14:36.142087Z",
     "iopub.status.idle": "2021-04-22T11:14:36.152150Z",
     "shell.execute_reply": "2021-04-22T11:14:36.151183Z"
    },
    "id": "-MiFAGrdj56g",
    "papermill": {
     "duration": 0.08833,
     "end_time": "2021-04-22T11:14:36.152343",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.064013",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# создаем список трехэлементных кортежей, в котором\n",
    "# первый элемент кортежа - название конвейера с\n",
    "# преобразованиями для определенного типа признаков\n",
    "transformers = [('num', num_pipe, num_columns),\n",
    "                ('cat', cat_pipe, cat_columns)]\n",
    "\n",
    "# передаем список трансформеров в ColumnTransformer\n",
    "transformer = ColumnTransformer(transformers=transformers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "southern-spoke",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:36.304289Z",
     "iopub.status.busy": "2021-04-22T11:14:36.303422Z",
     "iopub.status.idle": "2021-04-22T11:14:36.307234Z",
     "shell.execute_reply": "2021-04-22T11:14:36.306679Z"
    },
    "id": "Z1V4HwqWj56h",
    "papermill": {
     "duration": 0.076732,
     "end_time": "2021-04-22T11:14:36.307373",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.230641",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_1:\n",
    "    params2 = params   \n",
    "    # задаем итоговый конвейер\n",
    "    ml_pipe = Pipeline([('tr', transformer), \n",
    "                        ('lgboost', LGBMClassifier(**params))])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "pursuant-solomon",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:36.446450Z",
     "iopub.status.busy": "2021-04-22T11:14:36.445580Z",
     "iopub.status.idle": "2021-04-22T11:14:36.449202Z",
     "shell.execute_reply": "2021-04-22T11:14:36.448572Z"
    },
    "id": "BNzybeXGj56h",
    "papermill": {
     "duration": 0.076533,
     "end_time": "2021-04-22T11:14:36.449339",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.372806",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_1:\n",
    "    # задаем сетку гиперпараметров\n",
    "    param_grid = [{\n",
    "        'tr__cat__imputer__strategy': ['most_frequent',  'constant'],\n",
    "        'tr__cat__enc': [TargetEncoder(),\n",
    "                         #LabelEncoder(), \n",
    "                         OrdinalEncoder(),\n",
    "                         #OneHotEncoder(sparse=False, handle_unknown='ignore'),\n",
    "                         LeaveOneOutEncoder()\n",
    "                        ],\n",
    "        'tr__num__imputer__strategy': ['mean', 'median', 'constant'],\n",
    "        'tr__num__scal': [None], # StandardScaler()],\n",
    "        'lgboost__learning_rate': RANG_LEARNING_RATE,\n",
    "        'lgboost__n_estimators' : N_ESTIMATORS_RANG\n",
    "    }]\n",
    "    if TEST:\n",
    "        param_grid = [{\n",
    "            'lgboost__learning_rate': [0.03,0.02],\n",
    "            'lgboost__n_estimators' : [5],\n",
    "                'tr__cat__enc': [OrdinalEncoder()],\n",
    "        'tr__num__scal': [None], \n",
    "        'tr__cat__imputer__strategy': ['most_frequent',  'constant'],\n",
    "        'tr__num__imputer__strategy': ['mean', 'constant'],\n",
    "        }]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "identified-chinese",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:36.586296Z",
     "iopub.status.busy": "2021-04-22T11:14:36.585560Z",
     "iopub.status.idle": "2021-04-22T11:14:36.590334Z",
     "shell.execute_reply": "2021-04-22T11:14:36.589836Z"
    },
    "id": "toiOlZODj56h",
    "outputId": "4b8b1cc2-3607-4a94-aa12-a9f1b228a10d",
    "papermill": {
     "duration": 0.076165,
     "end_time": "2021-04-22T11:14:36.590463",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.514298",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 4 µs, sys: 0 ns, total: 4 µs\n",
      "Wall time: 7.63 µs\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "if Phase_1:\n",
    "    # создаем экземпляр класса RandomizedSearchCV или GridSearchCV, передав конвейер,\n",
    "    # сетку гиперпараметров и указав количество\n",
    "    # блоков перекрестной проверки, отключив запись метрик \n",
    "    # для обучающих блоков перекрестной проверки в атрибут cv_results_\n",
    "    #gs = GridSearchCV(\n",
    "    gs = RandomizedSearchCV( \n",
    "                      ml_pipe, \n",
    "                      param_grid, \n",
    "                      cv=CV, \n",
    "                      scoring='roc_auc', \n",
    "                      n_jobs=-1, \n",
    "                      return_train_score=False,\n",
    "                      verbose=3,\n",
    "                      random_state=SEED,\n",
    "                    n_iter = N_TRIALS\n",
    "                     )\n",
    "    # выполняем решетчатый поиск\n",
    "    gs.fit(train, y_train)\n",
    "    # записываем оптимальные значения гиперпараметров\n",
    "    OPT_PARAMS_PIPE = gs.best_params_ "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "central-rates",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:36.728950Z",
     "iopub.status.busy": "2021-04-22T11:14:36.728256Z",
     "iopub.status.idle": "2021-04-22T11:14:36.730607Z",
     "shell.execute_reply": "2021-04-22T11:14:36.731224Z"
    },
    "id": "wPDat-nmj56i",
    "papermill": {
     "duration": 0.074865,
     "end_time": "2021-04-22T11:14:36.731390",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.656525",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_1:\n",
    "    y_probas = gs.predict_proba(test)\n",
    "    # смотрим наилучшие значения гиперпараметров\n",
    "    print('Наилучшие значения гиперпараметров: {}'.format(OPT_PARAMS_PIPE))\n",
    "    # смотрим наилучшее значение AUC\n",
    "    print('Наилучшее значение AUC: {:.3f}'.format(gs.best_score_))\n",
    "    # смотрим значение AUC на тестовой выборке\n",
    "    print('Значение AUC на тестовой выборке: {:.3f}'.format(\n",
    "        roc_auc_score(y_test, y_probas[:, 1])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "rotary-milwaukee",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:36.866469Z",
     "iopub.status.busy": "2021-04-22T11:14:36.865792Z",
     "iopub.status.idle": "2021-04-22T11:14:36.875963Z",
     "shell.execute_reply": "2021-04-22T11:14:36.876492Z"
    },
    "id": "zCumPqG-j56i",
    "papermill": {
     "duration": 0.079223,
     "end_time": "2021-04-22T11:14:36.876662",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.797439",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_1:\n",
    "    # увеличиваем количество выводимых строк\n",
    "    pd.set_option('display.max_rows', 300)\n",
    "\n",
    "    # выводим результаты\n",
    "    cv_results = pd.DataFrame(gs.cv_results_)[['mean_test_score',\n",
    "                                               'param_lgboost__learning_rate',\n",
    "                                               'param_tr__cat__enc',\n",
    "                                               'param_tr__cat__imputer__strategy',\n",
    "                                               'param_tr__num__imputer__strategy'\n",
    "                                               #'param_tr__num__scal'\n",
    "                                               ]]\n",
    "    cv_results = cv_results.sort_values(by='mean_test_score', ascending=False).reset_index(drop=True)\n",
    "\n",
    "    for col in cv_results.columns[cv_results.columns.str.contains('enc')]:\n",
    "        if col in 'mean_test_score':\n",
    "            continue\n",
    "\n",
    "        cv_results[col] = cv_results[col].apply(lambda x: type(x).__name__)\n",
    "\n",
    "    display(cv_results)\n",
    "    \n",
    "    with open(NAME_RUN_LOG, 'at', encoding='utf-8') as logfile:\n",
    "        print('Временная метка окончания ФАЗЫ 1 : {}'.format(datetime.datetime.now().strftime(\"%d-%m-%Y %H:%M\")), \n",
    "          file=logfile)\n",
    "        print('Наилучшие значения гиперпараметров: {}'.format(gs.best_params_), file=logfile)\n",
    "        print('Наилучшее значение AUC: {:.3f}'.format(gs.best_score_), file=logfile)\n",
    "        print('Значение AUC на тестовой выборке: {:.3f}'.format(\n",
    "            roc_auc_score(y_test, gs.predict_proba(test)[:, 1])), file=logfile)\n",
    "        print('Таблица значений: ', file=logfile)\n",
    "        #print(display(cv_results), file=logfile)\n",
    "    with open(NAME_RUN_LOG, 'at', encoding='utf-8') as logfile:\n",
    "        cv_results.to_csv(NAME_RUN_LOG, index=False, mode='at')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "rental-ethnic",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:37.013617Z",
     "iopub.status.busy": "2021-04-22T11:14:37.012986Z",
     "iopub.status.idle": "2021-04-22T11:14:37.016799Z",
     "shell.execute_reply": "2021-04-22T11:14:37.017367Z"
    },
    "papermill": {
     "duration": 0.073616,
     "end_time": "2021-04-22T11:14:37.017528",
     "exception": false,
     "start_time": "2021-04-22T11:14:36.943912",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_1:\n",
    "    # рисуем ROC кривую \n",
    "    skplt.metrics.plot_roc(y_test, y_probas)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "speaking-adjustment",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:37.155496Z",
     "iopub.status.busy": "2021-04-22T11:14:37.154841Z",
     "iopub.status.idle": "2021-04-22T11:14:37.163209Z",
     "shell.execute_reply": "2021-04-22T11:14:37.163744Z"
    },
    "papermill": {
     "duration": 0.07926,
     "end_time": "2021-04-22T11:14:37.163914",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.084654",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.47231523177731743"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "if Phase_1:\n",
    "    # и выбираем лучшую точку порога\n",
    "    def Find_Optimal_Cutoff(target, predicted):\n",
    "        fpr, tpr, threshold = roc_curve(target, predicted)\n",
    "        i = np.arange(len(tpr)) \n",
    "        roc = pd.DataFrame({'tf' : pd.Series(tpr-(1-fpr), index=i), 'threshold' : pd.Series(threshold, index=i)})\n",
    "        roc_t = roc.loc[(roc.tf-0).abs().argsort()[:1]]\n",
    "\n",
    "        return list(roc_t['threshold']) \n",
    "\n",
    "    threshold = Find_Optimal_Cutoff(y_test, y_probas[:, 1])\n",
    "\n",
    "threshold"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "backed-productivity",
   "metadata": {
    "id": "1CNKuN-jj56i",
    "papermill": {
     "duration": 0.066434,
     "end_time": "2021-04-22T11:14:37.298223",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.231789",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "> # ********  Phase 2 *************"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "separate-column",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:37.434316Z",
     "iopub.status.busy": "2021-04-22T11:14:37.433643Z",
     "iopub.status.idle": "2021-04-22T11:14:37.438955Z",
     "shell.execute_reply": "2021-04-22T11:14:37.439507Z"
    },
    "papermill": {
     "duration": 0.075068,
     "end_time": "2021-04-22T11:14:37.439679",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.364611",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# трансформеры\n",
    "upd_cat_pipe = Pipeline([\n",
    "        ('imputer', SimpleImputer(strategy='most_frequent')), \n",
    "        ('enc', TargetEncoder())])\n",
    "upd_num_pipe = Pipeline([\n",
    "        ('imputer', SimpleImputer(strategy='median')), \n",
    "        ('scal', None)]) # \n",
    "\n",
    "upd_transformers = [('num', upd_num_pipe, num_columns),\n",
    "                    ('cat', upd_cat_pipe, cat_columns),]\n",
    "\n",
    "# передаем список трансформеров в ColumnTransformer\n",
    "upd_transformer = ColumnTransformer(transformers=upd_transformers)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "annual-father",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:37.578098Z",
     "iopub.status.busy": "2021-04-22T11:14:37.577364Z",
     "iopub.status.idle": "2021-04-22T11:14:37.581925Z",
     "shell.execute_reply": "2021-04-22T11:14:37.582556Z"
    },
    "id": "itTSx5MTj56j",
    "papermill": {
     "duration": 0.075706,
     "end_time": "2021-04-22T11:14:37.582759",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.507053",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_2:  \n",
    "    # задаем итоговый конвейер ПОКА ЧТО С НАЧАЛЬНЫМИ НАСТРОЙКАМИ\n",
    "    ml_pipe2 = Pipeline([('tr', upd_transformer), \n",
    "                         ('lgboost', LGBMClassifier(**params))])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "registered-decision",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:37.722566Z",
     "iopub.status.busy": "2021-04-22T11:14:37.721914Z",
     "iopub.status.idle": "2021-04-22T11:14:37.726543Z",
     "shell.execute_reply": "2021-04-22T11:14:37.726035Z"
    },
    "papermill": {
     "duration": 0.076674,
     "end_time": "2021-04-22T11:14:37.726687",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.650013",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# ml_pipe2.get_params().keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "spare-conflict",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:37.864857Z",
     "iopub.status.busy": "2021-04-22T11:14:37.864187Z",
     "iopub.status.idle": "2021-04-22T11:14:37.869271Z",
     "shell.execute_reply": "2021-04-22T11:14:37.869808Z"
    },
    "papermill": {
     "duration": 0.075709,
     "end_time": "2021-04-22T11:14:37.869984",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.794275",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_2:  \n",
    "    # УСТАНОВКА В НОВЫЙ PIPE НАИЛУЧШИХ ЗНАЧЕНИЙ НАЙДЕННЫХ В ПРЕДЫДУЩЕЙ ФАЗЕ:  \n",
    "    if Phase_1:  \n",
    "        # присваиваем итоговому конвейеру оптимальные значения гиперпараметров\n",
    "        print('Before modification lgboost__learning_rate ml_pipe2: ', ml_pipe2.get_params()['lgboost__learning_rate'])\n",
    "        ml_pipe2.set_params(**OPT_PARAMS_PIPE)\n",
    "        print('After modification lgboost__learning_rate ml_pipe2: ', ml_pipe2.get_params()['lgboost__learning_rate'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "stylish-province",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:38.009843Z",
     "iopub.status.busy": "2021-04-22T11:14:38.009062Z",
     "iopub.status.idle": "2021-04-22T11:14:38.017779Z",
     "shell.execute_reply": "2021-04-22T11:14:38.018346Z"
    },
    "papermill": {
     "duration": 0.080769,
     "end_time": "2021-04-22T11:14:38.018527",
     "exception": false,
     "start_time": "2021-04-22T11:14:37.937758",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_2:\n",
    "    # задаем новое пространство поиска\n",
    "    param_distributions = { # (1) гиперпараметры, задающие структуру дерева:\n",
    "                       'lgboost__num_leaves': IntUniformDistribution(2, 1024),#  4095),# 131070), #4095),#  (10, 200)\n",
    "                        #########'lgboost__max_depth': IntUniformDistribution(1, 32) #2, 63 и бесконечное #6, 127),\n",
    "                       'lgboost__max_bin': IntUniformDistribution(1, 1024),  \n",
    "                       'lgboost__min_child_samples': IntUniformDistribution(1, 300),\n",
    "                       'lgboost__min_sum_hessian_in_leaf': UniformDistribution(0.01, 300),#(синонимы:min_child_weight,...)\n",
    "                        # (2) гиперпараметры, привносящие случайность в ходе построения дерева:\n",
    "                       'lgboost__bagging_fraction': UniformDistribution(0.0, 1.0),# синонимы:subsample,...\n",
    "                       'lgboost__feature_fraction': UniformDistribution(0.0, 1.0), # (0.3, 0.9), #синонимы:colsample_bytree,...\n",
    "                       'lgboost__bagging_freq': IntUniformDistribution(1, 81, 5), # 'синонимы:subsample',...\n",
    "                        # (3) гиперпараметры, задающие регуляризацию функции потерь:\n",
    "                        'lgboost__reg_alpha': UniformDistribution(1e-3, 25.0), #0,01 или 0,1\n",
    "                        'lgboost__reg_lambda': UniformDistribution(1e-3, 25.0), #0,01 или 0,1\n",
    "\n",
    "                        # ЭТО ТОЛЬКО ДЛЯ БИНАРНОЙ КЛАССИФИКАЦИИ, ДЛЯ НЕСБАЛАНСИРОВАННЫХ КЛАСОВ\n",
    "                        # sample_pos_weight ~ number of negative samples / number of positive samples\n",
    "                        # т.е. в данном случае ~ \n",
    "                        #'lgboost__scale_pos_weight': UniformDistribution(0.1, 10) #[1, 10000] \n",
    "\n",
    "\n",
    "                        # Еще важные гиперпараметры (AG):\n",
    "                        # min_data_in_leaf\n",
    "                        # feature_fraction_bynode (синонимы:sub_feature_bynode,colsample_bynode)\n",
    "                        # min_sum_hessian_in_leaf[0,01,(размер выборки / 1000)](синонимы:min_sum_hessian_per_leaf,min_sum_hessian,min_hessian,min_child_weight)\n",
    "                        # max_bin_by_feature\n",
    "                        # min_data_in_bin\n",
    "\n",
    "    # для категориальных признаков\n",
    "    #'lgboost__min_data_per_group': IntUniformDistribution(50, 200),\n",
    "    #'lgboost__cat_smooth': IntUniformDistribution(10, 100) (1.0, 50.0),\n",
    "    #'lgboost__cat_l2': IntUniformDistribution(1, 20)\n",
    "\n",
    "    # Рекомендации с https://github.com/Microsoft/LightGBM/issues/695 (от Laurae2 commented on 16 Jul 2017)                   \n",
    "    # scale_pos_weight: [1, 10000]\n",
    "    # is_unbalance: false (сделайте свой собственный вес с помощью scale_pos_weight)              \n",
    "    # subsample: [0.4, 1]\n",
    "    # bagging_freq: только 1, оставить как есть (в противном случае переоборудование)\n",
    "    # colsample_bytree: [0,4, 1]\n",
    "    # вы можете использовать 5, 10, 20, 50, 100 для Early_stopping_rounds.\n",
    "    # ALL IFO: https://sites.google.com/view/lauraepp/parameters\n",
    "                      }\n",
    "\n",
    "\n",
    "    if TEST:\n",
    "        param_distributions = { # (1) гиперпараметры, задающие структуру дерева: \n",
    "                           'lgboost__min_child_samples': IntUniformDistribution(1, 300),\n",
    "                            # (2) гиперпараметры, привносящие случайность в ходе построения дерева:\n",
    "                           'lgboost__bagging_fraction': UniformDistribution(0.0, 1.0),# синонимы:subsample,...\n",
    "                           'lgboost__feature_fraction': UniformDistribution(0.0, 1.0), # (0.3, 0.9), #синонимы:colsample_bytree,...\n",
    "                           'lgboost__bagging_freq': IntUniformDistribution(1, 81, 5), # 'синонимы:subsample',...\n",
    "                            # (3) гиперпараметры, задающие регуляризацию функции потерь:\n",
    "                            'lgboost__reg_alpha': UniformDistribution(1e-3, 25.0), }  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "wrapped-stereo",
   "metadata": {
    "papermill": {
     "duration": 0.067942,
     "end_time": "2021-04-22T11:14:38.154120",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.086178",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "if Phase_2:  \n",
    "        # задаем новое пространство поиска\n",
    "    param_distributions = { # (1) гиперпараметры, задающие структуру дерева: \n",
    "                           'lgboost__min_child_samples': IntUniformDistribution(1, 300),\n",
    "        #'lgboost__max_bin',\n",
    "        \n",
    "                            # (2) гиперпараметры, привносящие случайность в ходе построения дерева:\n",
    "                           'lgboost__bagging_fraction': UniformDistribution(0.0, 1.0),# синонимы:subsample,...\n",
    "                           'lgboost__feature_fraction': UniformDistribution(0.0, 1.0), # (0.3, 0.9), #синонимы:colsample_bytree,...\n",
    "                           'lgboost__bagging_freq': IntUniformDistribution(1, 81, 5), # 'синонимы:subsample',...\n",
    "                            # (3) гиперпараметры, задающие регуляризацию функции потерь:\n",
    "                            'lgboost__reg_alpha': UniformDistribution(1e-3, 25.0), #0,01 или 0,1\n",
    "                            # ЭТО ТОЛЬКО ДЛЯ БИНАРНОЙ КЛАССИФИКАЦИИ, ДЛЯ НЕСБАЛАНСИРОВАННЫХ КЛАСОВ\n",
    "                            # sample_pos_weight ~ number of negative samples / number of positive samples\n",
    "                            # т.е. в данном случае ~ \n",
    "                            #'lgboost__scale_pos_weight': UniformDistribution(0.1, 10) #[1, 10000] \n",
    "                          }\n",
    " \n",
    "    \n",
    "    if TEST:\n",
    "        param_distributions = { # (1) гиперпараметры, задающие структуру дерева: \n",
    "                           'lgboost__min_child_samples': IntUniformDistribution(1, 300),\n",
    "                            # (2) гиперпараметры, привносящие случайность в ходе построения дерева:\n",
    "                           'lgboost__bagging_fraction': UniformDistribution(0.0, 1.0),# синонимы:subsample,...\n",
    "                           'lgboost__feature_fraction': UniformDistribution(0.0, 1.0), # (0.3, 0.9), #синонимы:colsample_bytree,...\n",
    "                           'lgboost__bagging_freq': IntUniformDistribution(1, 81, 5), # 'синонимы:subsample',...\n",
    "                            # (3) гиперпараметры, задающие регуляризацию функции потерь:\n",
    "                            'lgboost__reg_alpha': UniformDistribution(1e-3, 25.0), }          "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "electrical-passenger",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:38.292307Z",
     "iopub.status.busy": "2021-04-22T11:14:38.291676Z",
     "iopub.status.idle": "2021-04-22T11:14:38.295806Z",
     "shell.execute_reply": "2021-04-22T11:14:38.296321Z"
    },
    "papermill": {
     "duration": 0.074607,
     "end_time": "2021-04-22T11:14:38.296484",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.221877",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_2:\n",
    "    # создаем экземпляр класса OptunaSearchCV\n",
    "    optuna_search = OptunaSearchCV(\n",
    "        ml_pipe2,\n",
    "        param_distributions,\n",
    "        scoring='roc_auc',\n",
    "        random_state=SEED,\n",
    "        n_trials=N_TRIALS,\n",
    "        #verbose=1,\n",
    "        cv=CV_O)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "derived-conditioning",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:38.434469Z",
     "iopub.status.busy": "2021-04-22T11:14:38.433861Z",
     "iopub.status.idle": "2021-04-22T11:14:38.440149Z",
     "shell.execute_reply": "2021-04-22T11:14:38.439625Z"
    },
    "id": "3Tbb9_ryj56k",
    "papermill": {
     "duration": 0.076229,
     "end_time": "2021-04-22T11:14:38.440303",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.364074",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3 µs, sys: 1 µs, total: 4 µs\n",
      "Wall time: 7.15 µs\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "if Phase_2:\n",
    "    # выполняем оптимизацию\n",
    "    optuna_search.fit(train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "wooden-cotton",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:38.585731Z",
     "iopub.status.busy": "2021-04-22T11:14:38.584986Z",
     "iopub.status.idle": "2021-04-22T11:14:38.588365Z",
     "shell.execute_reply": "2021-04-22T11:14:38.587808Z"
    },
    "id": "SyreK__Qj56l",
    "papermill": {
     "duration": 0.080196,
     "end_time": "2021-04-22T11:14:38.588510",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.508314",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "if Phase_2:\n",
    "    # записываем оптимальные значения гиперпараметров optuna\n",
    "    opt_optuna_params_pipe = optuna_search.best_params_\n",
    "    if Phase_1:\n",
    "        opt_optuna_params_pipe['lgboost__learning_rate'] = OPT_PARAMS_PIPE['lgboost__learning_rate']\n",
    "        opt_optuna_params_pipe['lgboost__n_estimators']  = OPT_PARAMS_PIPE['lgboost__n_estimators']\n",
    "        \n",
    "####### !!!!!!!!!!!!!!!!!!!!!!!!!!        opt_optuna_params_pipe['lgboost__n_estimators'] = OPT_PARAMS_PIPE['lgboost__n_estimators'] \n",
    "\n",
    "    # печатаем наилучшие значения гиперпараметров\n",
    "    print('Наилучшие значения гиперпараметров: {}'.format(opt_optuna_params_pipe))\n",
    "    # печатаем наилучшее значение AUC\n",
    "    print('Наилучшее значение AUC: {:.3f}'.format(optuna_search.best_score_))\n",
    "    # смотрим значение AUC на тестовой выборке\n",
    "    print('AUC на тестовой выборке: {:.3f}'.format(\n",
    "        roc_auc_score(y_test, optuna_search.predict_proba(test)[:, 1])))\n",
    "    print('')\n",
    "    with open(NAME_RUN_LOG, 'at', encoding='utf-8') as logfile:\n",
    "        print('/nВременная метка окончания ФАЗЫ 2 : {}'.format(datetime.datetime.now().strftime(\"%d-%m-%Y %H:%M\")), \n",
    "          file=logfile)\n",
    "        print('Наилучшие значения гиперпараметров найденых optuna: \\n{}'.format(opt_optuna_params_pipe), file=logfile)\n",
    "        print('Наилучшее значение AUC: {:.3f}'.format(optuna_search.best_score_), file=logfile)\n",
    "        print('AUC на тестовой выборке: {:.3f}\\n'.format(\n",
    "            roc_auc_score(y_test, optuna_search.predict_proba(test)[:, 1])), file=logfile)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "dedicated-eclipse",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:38.730327Z",
     "iopub.status.busy": "2021-04-22T11:14:38.729629Z",
     "iopub.status.idle": "2021-04-22T11:14:38.732199Z",
     "shell.execute_reply": "2021-04-22T11:14:38.732836Z"
    },
    "papermill": {
     "duration": 0.075682,
     "end_time": "2021-04-22T11:14:38.733022",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.657340",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#opt_optuna_params_pipe"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "hired-heater",
   "metadata": {
    "id": "XEUoguQDj56m",
    "papermill": {
     "duration": 0.072076,
     "end_time": "2021-04-22T11:14:38.875577",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.803501",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "> # ********  Phase 3 *************"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "radio-colors",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:39.019891Z",
     "iopub.status.busy": "2021-04-22T11:14:39.018881Z",
     "iopub.status.idle": "2021-04-22T11:14:39.026829Z",
     "shell.execute_reply": "2021-04-22T11:14:39.026147Z"
    },
    "id": "iexbKXzIj56m",
    "papermill": {
     "duration": 0.08301,
     "end_time": "2021-04-22T11:14:39.026972",
     "exception": false,
     "start_time": "2021-04-22T11:14:38.943962",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# формируем массив меток и массив признаков\n",
    "train = data.drop(TARGET, axis=1)              \n",
    "Y = data[TARGET] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "detected-projection",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:39.170253Z",
     "iopub.status.busy": "2021-04-22T11:14:39.169277Z",
     "iopub.status.idle": "2021-04-22T11:14:39.172765Z",
     "shell.execute_reply": "2021-04-22T11:14:39.172229Z"
    },
    "papermill": {
     "duration": 0.077046,
     "end_time": "2021-04-22T11:14:39.172908",
     "exception": false,
     "start_time": "2021-04-22T11:14:39.095862",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#ml_pipe3.get_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "documented-stanley",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:39.317201Z",
     "iopub.status.busy": "2021-04-22T11:14:39.316535Z",
     "iopub.status.idle": "2021-04-22T11:14:39.319685Z",
     "shell.execute_reply": "2021-04-22T11:14:39.319169Z"
    },
    "id": "JEGiSIpDj56m",
    "papermill": {
     "duration": 0.078554,
     "end_time": "2021-04-22T11:14:39.319852",
     "exception": false,
     "start_time": "2021-04-22T11:14:39.241298",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#  трансформеры - используем ТЕ ЖЕ что и для второй модели\n",
    "    \n",
    "# задаем итоговый конвейер ПОКА ЧТО С НАЧАЛЬНЫМИ НАСТРОЙКАМИ\n",
    "ml_pipe3 = Pipeline([('tr', upd_transformer), \n",
    "                     ('lgboost', LGBMClassifier(**params))])\n",
    "\n",
    "if Phase_2: \n",
    "    # Для контроля изменений смотрим выбранные параметры модели \n",
    "    opt_par = ['lgboost__n_estimators','lgboost__learning_rate','lgboost__num_leaves']\n",
    "    print(opt_par)\n",
    "    print( 'Before modification ml_pipe3: ' ,[ml_pipe3.get_params()[x] for x in opt_par])\n",
    "    \n",
    "    # УСТАНОВКА В НОВЫЙ PIPE НАИЛУЧШИХ ЗНАЧЕНИЙ НАЙДЕННЫХ В ПРЕДЫДУЩЕЙ ФАЗЕ:  \n",
    "    # присваиваем итоговому конвейеру оптимальные значения гиперпараметров найденные optuna\n",
    "    ml_pipe3.set_params(**opt_optuna_params_pipe)\n",
    "    \n",
    "    # Для контроля изменений\n",
    "    print( 'After modification ml_pipe3: ' ,[ml_pipe3.get_params()[x] for x in opt_par])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "searching-grave",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:39.462039Z",
     "iopub.status.busy": "2021-04-22T11:14:39.461083Z",
     "iopub.status.idle": "2021-04-22T11:14:39.495755Z",
     "shell.execute_reply": "2021-04-22T11:14:39.495084Z"
    },
    "papermill": {
     "duration": 0.107334,
     "end_time": "2021-04-22T11:14:39.495904",
     "exception": false,
     "start_time": "2021-04-22T11:14:39.388570",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "with open(NAME_RUN_LOG, 'at', encoding='utf-8') as logfile:\n",
    "        print('Параметры конечной модели, формирующей посылку(submission): \\n{}'.format(ml_pipe3.get_params()), file=logfile)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "affecting-independence",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:14:39.644926Z",
     "iopub.status.busy": "2021-04-22T11:14:39.644216Z",
     "iopub.status.idle": "2021-04-22T11:19:19.933523Z",
     "shell.execute_reply": "2021-04-22T11:19:19.932996Z"
    },
    "id": "L_w96b7Sj56n",
    "papermill": {
     "duration": 280.36869,
     "end_time": "2021-04-22T11:19:19.933662",
     "exception": false,
     "start_time": "2021-04-22T11:14:39.564972",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/conda/lib/python3.7/site-packages/category_encoders/utils.py:21: FutureWarning: is_categorical is deprecated and will be removed in a future version.  Use is_categorical_dtype instead\n",
      "  elif pd.api.types.is_categorical(cols):\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Warning] feature_fraction is set=0.5588941289441328, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.5588941289441328\n",
      "[LightGBM] [Warning] bagging_freq is set=51, subsample_freq=0 will be ignored. Current value: bagging_freq=51\n",
      "[LightGBM] [Warning] min_sum_hessian_in_leaf is set=36.23686299058342, min_child_weight=0.001 will be ignored. Current value: min_sum_hessian_in_leaf=36.23686299058342\n",
      "[LightGBM] [Warning] bagging_fraction is set=0.9663000952102834, subsample=1.0 will be ignored. Current value: bagging_fraction=0.9663000952102834\n",
      "CPU times: user 18min 8s, sys: 9.85 s, total: 18min 17s\n",
      "Wall time: 4min 40s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Pipeline(steps=[('tr',\n",
       "                 ColumnTransformer(transformers=[('num',\n",
       "                                                  Pipeline(steps=[('imputer',\n",
       "                                                                   SimpleImputer(strategy='median')),\n",
       "                                                                  ('scal',\n",
       "                                                                   None)]),\n",
       "                                                  ['Pclass', 'Age', 'SibSp',\n",
       "                                                   'Parch', 'Fare']),\n",
       "                                                 ('cat',\n",
       "                                                  Pipeline(steps=[('imputer',\n",
       "                                                                   SimpleImputer(strategy='most_frequent')),\n",
       "                                                                  ('enc',\n",
       "                                                                   TargetEncoder())]),\n",
       "                                                  Index(['Sex', 'Ticket', 'Cabin', 'Embarked'], dtype='object'))])),\n",
       "                ('lgboost',\n",
       "                 LGBMClassifier(bagging_fraction=0.9663000952102834,\n",
       "                                bagging_freq=51,\n",
       "                                feature_fraction=0.5588941289441328,\n",
       "                                learning_rate=0.0004, max_bin=631,\n",
       "                                min_child_samples=287,\n",
       "                                min_sum_hessian_in_leaf=36.23686299058342,\n",
       "                                n_estimators=20000, num_leaves=246,\n",
       "                                reg_alpha=10.794311547009851,\n",
       "                                reg_lambda=0.5872293349946798))])"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "# обучаем обновленную модель на всей обучающей выборке\n",
    "ml_pipe3.fit(train, Y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "sunset-invalid",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:19:20.086302Z",
     "iopub.status.busy": "2021-04-22T11:19:20.085584Z",
     "iopub.status.idle": "2021-04-22T11:22:30.819000Z",
     "shell.execute_reply": "2021-04-22T11:22:30.819502Z"
    },
    "id": "TvrX7Zx7j56n",
    "papermill": {
     "duration": 190.815179,
     "end_time": "2021-04-22T11:22:30.819681",
     "exception": false,
     "start_time": "2021-04-22T11:19:20.004502",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 12min 29s, sys: 276 ms, total: 12min 29s\n",
      "Wall time: 3min 10s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "# вычисляем вероятности для тестовой выборки\n",
    "lgbm_preds_prob = ml_pipe3.predict_proba(test_o)[:, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "ongoing-mexico",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T11:22:30.967251Z",
     "iopub.status.busy": "2021-04-22T11:22:30.966611Z",
     "iopub.status.idle": "2021-04-22T12:04:01.618614Z",
     "shell.execute_reply": "2021-04-22T12:04:01.619163Z"
    },
    "papermill": {
     "duration": 2490.729302,
     "end_time": "2021-04-22T12:04:01.619347",
     "exception": false,
     "start_time": "2021-04-22T11:22:30.890045",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.27137413, 0.08026366, 0.11795616, 0.09676672, 0.09667196,\n",
       "       0.14599284, 0.10414509, 0.47211236, 0.22205036, 0.64760356])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# получаем ответы (вероятности) для проверочных блоков перекрестной проверки на всей тренировочной выборке\n",
    "LGBM_probs = cross_val_predict(ml_pipe3, train, Y, cv=10, n_jobs=-1, method='predict_proba')[:,1]\n",
    "LGBM_probs[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "accompanied-customer",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:01.769778Z",
     "iopub.status.busy": "2021-04-22T12:04:01.769044Z",
     "iopub.status.idle": "2021-04-22T12:04:01.816819Z",
     "shell.execute_reply": "2021-04-22T12:04:01.817280Z"
    },
    "papermill": {
     "duration": 0.125008,
     "end_time": "2021-04-22T12:04:01.817460",
     "exception": false,
     "start_time": "2021-04-22T12:04:01.692452",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC на всей исторической выборке: 0.854\n"
     ]
    }
   ],
   "source": [
    "print('AUC на всей исторической выборке: {:.3f}'.format(\n",
    "    roc_auc_score(Y, LGBM_probs )))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "american-portland",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:01.971576Z",
     "iopub.status.busy": "2021-04-22T12:04:01.970883Z",
     "iopub.status.idle": "2021-04-22T12:04:02.007921Z",
     "shell.execute_reply": "2021-04-22T12:04:02.008440Z"
    },
    "papermill": {
     "duration": 0.118245,
     "end_time": "2021-04-22T12:04:02.008616",
     "exception": false,
     "start_time": "2021-04-22T12:04:01.890371",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.44590814264567985]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# и выбираем лучшую точку порога\n",
    "def Find_Optimal_Cutoff(target, predicted):\n",
    "    fpr, tpr, threshold = roc_curve(target, predicted)\n",
    "    i = np.arange(len(tpr)) \n",
    "    roc = pd.DataFrame({'tf' : pd.Series(tpr-(1-fpr), index=i), 'threshold' : pd.Series(threshold, index=i)})\n",
    "    roc_t = roc.loc[(roc.tf-0).abs().argsort()[:1]]\n",
    "\n",
    "    return list(roc_t['threshold']) \n",
    "\n",
    "threshold = Find_Optimal_Cutoff(Y, LGBM_probs)\n",
    "\n",
    "threshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ordinary-notice",
   "metadata": {
    "papermill": {
     "duration": 0.072102,
     "end_time": "2021-04-22T12:04:02.153992",
     "exception": false,
     "start_time": "2021-04-22T12:04:02.081890",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "numeric-perspective",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:02.304846Z",
     "iopub.status.busy": "2021-04-22T12:04:02.303692Z",
     "iopub.status.idle": "2021-04-22T12:04:02.308958Z",
     "shell.execute_reply": "2021-04-22T12:04:02.308354Z"
    },
    "papermill": {
     "duration": 0.082291,
     "end_time": "2021-04-22T12:04:02.309091",
     "exception": false,
     "start_time": "2021-04-22T12:04:02.226800",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0, 1, 1, ..., 0, 1, 1]), numpy.ndarray)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_pred_bool = (lgbm_preds_prob >= threshold).astype(int)\n",
    "test_pred_bool,type(test_pred_bool)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "intended-conditions",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:02.462562Z",
     "iopub.status.busy": "2021-04-22T12:04:02.461910Z",
     "iopub.status.idle": "2021-04-22T12:04:02.772101Z",
     "shell.execute_reply": "2021-04-22T12:04:02.772589Z"
    },
    "id": "HNHBkKGvj56o",
    "papermill": {
     "duration": 0.390445,
     "end_time": "2021-04-22T12:04:02.772791",
     "exception": false,
     "start_time": "2021-04-22T12:04:02.382346",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PassengerId</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>100000</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100001</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100002</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100003</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>100004</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199995</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199996</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199997</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199998</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199999</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100000 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Survived\n",
       "PassengerId          \n",
       "100000              0\n",
       "100001              1\n",
       "100002              1\n",
       "100003              0\n",
       "100004              1\n",
       "...               ...\n",
       "199995              1\n",
       "199996              0\n",
       "199997              0\n",
       "199998              1\n",
       "199999              1\n",
       "\n",
       "[100000 rows x 1 columns]"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission = pd.read_csv(input_path / ('sample_submission.' + d_ext), index_col=INDEX_COL)\n",
    "####### и формируем посылку\n",
    "submission[TARGET] = test_pred_bool\n",
    "if  WHERE_PLACE == \"kaggle\":\n",
    "    submission.to_csv(NAME_OUTPUT_FILE+'.'+d_ext)\n",
    "else:    \n",
    "    submission.to_csv(input_path / (NAME_OUTPUT_FILE+'.'+d_ext))\n",
    "\n",
    "submission"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "inner-newsletter",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:02.929001Z",
     "iopub.status.busy": "2021-04-22T12:04:02.928191Z",
     "iopub.status.idle": "2021-04-22T12:04:02.933145Z",
     "shell.execute_reply": "2021-04-22T12:04:02.932644Z"
    },
    "id": "qnHI4879j56o",
    "papermill": {
     "duration": 0.087257,
     "end_time": "2021-04-22T12:04:02.933296",
     "exception": false,
     "start_time": "2021-04-22T12:04:02.846039",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Duration: 0.0 hours 49.0 minutes 39.29399847984314 seconds.\n",
      "\n",
      "\n",
      "Время окончания работы скрипта: 22-04-2021 12:04\n",
      "***********************\n",
      "\n"
     ]
    }
   ],
   "source": [
    "end_time = time()\n",
    "time_taken = end_time - start_time # time_taken is in seconds\n",
    "hours, rest = divmod(time_taken,3600)\n",
    "minutes, seconds = divmod(rest, 60)\n",
    "print('Duration: {} hours {} minutes {} seconds.'.format(hours, minutes, seconds))\n",
    "print('\\n\\nВремя окончания работы скрипта: {}\\n***********************\\n'.format(datetime.datetime.now().strftime(\"%d-%m-%Y %H:%M\")))\n",
    "with open(NAME_RUN_LOG, 'at', encoding='utf-8') as logfile:\n",
    "    print('\\n\\nВремя окончания работы скрипта: {}\\n***********************\\n'.format(datetime.datetime.now().strftime(\"%d-%m-%Y %H:%M\")), \n",
    "          file=logfile)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "quarterly-brief",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:03.086358Z",
     "iopub.status.busy": "2021-04-22T12:04:03.085462Z",
     "iopub.status.idle": "2021-04-22T12:04:03.089439Z",
     "shell.execute_reply": "2021-04-22T12:04:03.088809Z"
    },
    "papermill": {
     "duration": 0.082435,
     "end_time": "2021-04-22T12:04:03.089580",
     "exception": false,
     "start_time": "2021-04-22T12:04:03.007145",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#ml_pipe3.get_params()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "protecting-retention",
   "metadata": {
    "papermill": {
     "duration": 0.074995,
     "end_time": "2021-04-22T12:04:03.243848",
     "exception": false,
     "start_time": "2021-04-22T12:04:03.168853",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# Для использование в дальнейшем стекинге:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "disturbed-parker",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:03.729968Z",
     "iopub.status.busy": "2021-04-22T12:04:03.728919Z",
     "iopub.status.idle": "2021-04-22T12:04:04.221448Z",
     "shell.execute_reply": "2021-04-22T12:04:04.220793Z"
    },
    "papermill": {
     "duration": 0.902647,
     "end_time": "2021-04-22T12:04:04.221599",
     "exception": false,
     "start_time": "2021-04-22T12:04:03.318952",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.10353605, 0.55137373, 0.91574437, 0.20243069, 0.79767882,\n",
       "       0.24027041, 0.71054816, 0.12893088, 0.41797068, 0.12865863])"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.savetxt(NAME_OUTPUT_FOR_STAKING_TEST, lgbm_preds_prob )\n",
    "# Проверим\n",
    "new_num_arr = np.loadtxt(NAME_OUTPUT_FOR_STAKING_TEST)\n",
    "new_num_arr[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "broadband-check",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:04.382022Z",
     "iopub.status.busy": "2021-04-22T12:04:04.381201Z",
     "iopub.status.idle": "2021-04-22T12:04:04.714415Z",
     "shell.execute_reply": "2021-04-22T12:04:04.713830Z"
    },
    "papermill": {
     "duration": 0.415175,
     "end_time": "2021-04-22T12:04:04.714554",
     "exception": false,
     "start_time": "2021-04-22T12:04:04.299379",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "#XGBM_probs.to_csv(\"XGBM_probs_for_staking(v1)_TEST\"+'.'+d_ext)\n",
    "np.savetxt(NAME_OUTPUT_FOR_STAKING, LGBM_probs )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "experimental-piece",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2021-04-22T12:04:05.359128Z",
     "iopub.status.busy": "2021-04-22T12:04:05.115177Z",
     "iopub.status.idle": "2021-04-22T12:04:05.367261Z",
     "shell.execute_reply": "2021-04-22T12:04:05.367805Z"
    },
    "papermill": {
     "duration": 0.577077,
     "end_time": "2021-04-22T12:04:05.367991",
     "exception": false,
     "start_time": "2021-04-22T12:04:04.790914",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.27137413, 0.08026366, 0.11795616, 0.09676672, 0.09667196,\n",
       "       0.14599284, 0.10414509, 0.47211236, 0.22205036, 0.64760356])"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_num_arr = np.loadtxt(NAME_OUTPUT_FOR_STAKING)\n",
    "new_num_arr[:10]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 2990.228571,
   "end_time": "2021-04-22T12:04:06.760720",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2021-04-22T11:14:16.532149",
   "version": "2.3.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
